Qu'est-ce que le JRE? Introduction à l'environnement d'exécution Java

Ensemble, le Java Development Kit (JDK), la Java Virtual Machine (JVM) et le Java Runtime Environment (JRE) forment un trio puissant de composants de plate-forme Java pour le développement et l'exécution d'applications Java. J'ai déjà présenté le JDK et la JVM. Dans ce rapide didacticiel, vous découvrirez le JRE, qui est l'environnement d'exécution pour Java.

En pratique, un environnement d'exécution est un logiciel conçu pour exécuter d'autres logiciels. En tant qu'environnement d'exécution pour Java, le JRE contient les bibliothèques de classes Java, le chargeur de classes Java et la machine virtuelle Java. Dans ce système:

  • Le chargeur de classe est responsable du chargement correct des classes et de leur connexion avec les bibliothèques de classes Java principales.
  • La JVM est chargée de s'assurer que les applications Java disposent des ressources nécessaires pour s'exécuter et fonctionner correctement dans votre appareil ou dans votre environnement cloud.
  • Le JRE est principalement un conteneur pour ces autres composants et est chargé d'orchestrer leurs activités.

Nous approfondirons la façon dont ces composants fonctionnent ensemble dans les sections qui suivent.

Installation du JDK, JRE et JVM

Du point de vue de l'installation, chaque fois que vous téléchargez un JDK, il inclura un JRE compatible avec la version, et ce JRE inclura une JVM par défaut. Vous pouvez également télécharger le JRE séparément du JDK, et vous pouvez choisir parmi une variété de JVM. Les valeurs par défaut fonctionnent bien pour la plupart des implémentations, en particulier lorsque vous débutez avec Java.

Qu'est-ce qu'un environnement d'exécution?

Un programme logiciel doit s'exécuter et, pour ce faire, il a besoin d'un environnement pour s'exécuter. L'environnement d'exécution charge les fichiers de classe et garantit l'accès à la mémoire et aux autres ressources système pour les exécuter. Dans le passé, la plupart des logiciels utilisaient le système d'exploitation (OS) comme environnement d'exécution. Le programme fonctionnait sur n'importe quel ordinateur sur lequel il se trouvait, mais reposait sur les paramètres du système d'exploitation pour l'accès aux ressources. Les ressources dans ce cas seraient des éléments tels que la mémoire, les fichiers programme et les dépendances. L'environnement d'exécution Java a tout changé, du moins pour les programmes Java.

WORA pour Java

Lorsqu'il a été introduit pour la première fois, le principe de Java "écrire une fois, exécuter n'importe où" était considéré comme révolutionnaire, mais aujourd'hui il a été adopté comme norme pour la plupart des systèmes logiciels.

L'environnement d'exécution Java

Nous pouvons considérer le logiciel comme une série de couches qui reposent sur le matériel du système. Chaque couche fournit des services qui seront utilisés (et requis) par les couches supérieures. L'environnement d'exécution Java est une couche logicielle qui s'exécute au-dessus du système d'exploitation d'un ordinateur, fournissant des services supplémentaires spécifiques à Java.

Le JRE adoucit la diversité des systèmes d'exploitation, garantissant que les programmes Java peuvent s'exécuter sur pratiquement n'importe quel système d'exploitation sans modification. Il fournit également des services à valeur ajoutée. La gestion automatique de la mémoire est l'un des services les plus importants du JRE, garantissant que les programmeurs n'ont pas à contrôler manuellement l'allocation et la réallocation de la mémoire.

En bref, le JRE est une sorte de méta-OS pour les programmes Java. C'est un exemple classique d' abstraction , faisant abstraction du système d'exploitation sous-jacent en une plate-forme cohérente pour l'exécution d'applications Java.

Comment le JRE fonctionne avec la JVM

Une machine virtuelle Java est un système logiciel en cours d'exécution responsable de l'exécution de programmes Java en direct. Le JRE est le système sur disque qui prend votre code Java, le combine avec les bibliothèques nécessaires et démarre la JVM pour l'exécuter.

Le JRE contient des bibliothèques et des logiciels dont vos programmes Java ont besoin pour s'exécuter. Par exemple, le chargeur de classe Java fait partie de l'environnement d'exécution Java. Cet important logiciel charge le code Java compilé en mémoire et connecte le code aux bibliothèques de classes Java appropriées.

Dans la vue en couches que je viens de décrire, la JVM est créée par le JRE. Du point de vue du package, le JRE contient la JVM, comme le montre la figure 1.

Matthew Tyson

Installation et utilisation du JRE

Bien qu'il y ait un côté conceptuel au JRE, dans la pratique du monde réel, il s'agit simplement d'un logiciel installé sur un ordinateur, dont le but est d'exécuter vos programmes Java. En tant que développeur, vous travaillerez principalement avec le JDK et la JVM, car ce sont les composants de la plateforme que vous utilisez pour développer et exécuter vos programmes Java. En tant qu'utilisateur d'application Java, vous seriez plus impliqué dans le JRE, qui vous permet d'exécuter ces programmes.

Dans la plupart des cas, votre ordinateur sera livré avec Java installé, et le JRE sera inclus avec cela. Si vous avez besoin d'installer ou de mettre à niveau manuellement, vous pouvez télécharger la version actuelle de JRE à partir d'Oracle.

Versions JRE

L'environnement d'exécution Java est mis à jour pour chaque nouvelle version de Java et ses numéros de version s'alignent sur le système de gestion des versions de la plate-forme Java. Ainsi, par exemple, JRE 1.8 exécute Java 8. Bien que vous ayez le choix entre plusieurs packages JDK (tels que Enterprise Edition ou Standard Edition) ce n'est pas le cas avec le JRE. La plupart des ordinateurs exécutent un JRE développé pour Java SE, qui est capable d'exécuter n'importe quelle application Java quelle que soit la façon dont elle a été développée. La plupart des appareils mobiles sont livrés avec un JRE pour Java ME, qui est préinstallé sur l'appareil mobile et n'est pas disponible au téléchargement.

Une fois le JRE installé, vous pouvez interagir avec lui sur la ligne de commande en entrant  java -version, ce qui vous indiquera quelle version est installée. Sur les systèmes POSIX, vous pouvez toujours vérifier l'emplacement d'installation avec which java.

Le JRE dans les devops

Le JRE n'est pas très visible dans la phase de développement, où il exécute principalement vos programmes dans le système d'exploitation ou l'IDE de votre choix. Le JRE joue un rôle légèrement plus important dans l'administration des devops et des systèmes car il est utilisé pour la surveillance et la configuration.

Fondamentalement, le JRE fournit les "boutons" que vous utiliseriez pour configurer et contrôler les caractéristiques d'une application Java. L'utilisation de la mémoire est un excellent exemple, le pain et le beurre de l'administration des systèmes. Bien que l'utilisation de la mémoire soit toujours importante, elle est vitale dans les configurations cloud, et devops est une technologie basée sur le cloud. Si vous travaillez dans un environnement devops ou si vous souhaitez vous lancer dans devops, c'est une bonne idée de comprendre comment la mémoire Java fonctionne et comment elle est surveillée dans le JRE.

Devops ou sysadmin?

Devops est un nouveau terme, mais il décrit quelque chose qui est vrai depuis des décennies, à savoir l'interopérabilité entre le développement et les opérations. En ce sens, devops est juste un terme plus récent pour ce que l'on appelait autrefois les opérations ou l'administration des systèmes. Tout comme sysadmin, un aspect important de devops est l'administration des systèmes nécessaires à l'exécution du logiciel. La gestion du JRE fait partie de la gestion des systèmes qui exécutent des applications Java.

Mémoire Java et JRE

La mémoire Java se compose de trois composants: le tas, la pile et la métaspace (qui s'appelait auparavant permgen).

  • Metaspace est l'endroit où Java conserve les informations inchangées de votre programme, telles que les définitions de classe.
  • L'espace de tas est l'endroit où Java conserve le contenu variable.
  • L'espace de pile est l'endroit où Java stocke l'exécution des fonctions et les références de variables.

Gestion de la mémoire dans Java 8

Jusqu'à Java 8, metaspace était connu sous le nom de permgen. En plus d'être un nom beaucoup plus cool, metaspace est un changement significatif dans la façon dont les développeurs interagissent avec l'espace mémoire de Java. Auparavant, vous java -XX:MaxPermSizeutilisiez la commande pour surveiller la taille de l'espace permgen. À partir de Java 8, Java augmente automatiquement la taille de la méta-espace pour répondre aux méta-besoins de votre programme. Java 8 a également introduit un nouvel indicateur, MaxMetaspaceSizequi peut être utilisé pour limiter la taille de la méta-espace.

Les autres options de mémoire, tas et pile, restent les mêmes dans Java 8.

Configuration de l'espace de tas

L'espace de tas est la partie la plus dynamique du système de mémoire Java. Vous pouvez utiliser les indicateurs -Xmset -Xmxpour indiquer à Java la taille de démarrage du tas et la taille à autoriser à devenir. Comprendre comment régler ces indicateurs pour les besoins spécifiques des programmes est un aspect important de la gestion de la mémoire en Java. L'idéal est de rendre le tas assez grand pour atteindre le ramasse-miettes le plus efficace. Autrement dit, vous souhaitez autoriser suffisamment de mémoire pour permettre au programme de s'exécuter, mais vous ne voulez pas qu'il soit plus grand que nécessaire.

Configuration de l'espace de pile

L'espace de pile est l'endroit où les appels de fonction et les références de variable sont mis en file d'attente. L'espace de pile est la source de la deuxième erreur la plus notoire de la programmation Java: l'exception de débordement de pile (la première est l'exception de pointeur nul). L' exception de débordement de pile indique que vous n'avez plus d'espace de pile car une trop grande partie a été réservée. Habituellement, vous aurez un débordement de pile lorsqu'une méthode ou des méthodes s'appellent de manière circulaire, consacrant ainsi un nombre toujours croissant d'appels de fonctions dans la pile.

Vous utilisez le -Xsscommutateur pour configurer la taille de départ de la pile. La pile se développe ensuite dynamiquement en fonction des besoins du programme.

Surveillance des applications Java

Bien que la surveillance des applications soit une fonction de la JVM, JRE fournit des options de configuration, qui constituent la base de référence nécessaire pour la surveillance. Une variété d'outils sont disponibles pour surveiller les applications Java, des classiques (comme la commande Unix top) aux solutions de surveillance à distance sophistiquées comme la surveillance de l'infrastructure d'Oracle.

Entre ces options se trouvent des profileurs visuels comme VisualVM qui permettent d'inspecter une machine virtuelle Java en cours d'exécution. Ces outils permettent de localiser les hotspots et les fuites de mémoire, ainsi que de surveiller la consommation globale de mémoire de votre système.

Conclusion

L'environnement d'exécution Java est le programme sur disque qui charge les applications Java à exécuter par la JVM. Un JRE est inclus par défaut lorsque vous téléchargez le kit de développement Java, et chaque JRE comprend les bibliothèques de classes Java principales, un chargeur de classes Java et une machine virtuelle Java. Il est utile de comprendre comment la JVM, le JDK et le JRE interagissent, en particulier pour travailler dans des environnements cloud et devops. Dans ces environnements, le JRE joue un rôle plus important dans la surveillance et la configuration qu'il ne le ferait dans le développement d'applications Java traditionnelles.

Cette histoire, "Qu'est-ce que JRE? Introduction à l'environnement d'exécution Java" a été publiée à l'origine par JavaWorld.