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

Ensemble, le kit de développement Java (JDK), la machine virtuelle Java (JVM) et l’environnement d’exécution Java (JRE) forment un trio puissant de composants de plate-forme Java et Jakarta EE pour développer et exécuter des applications Java. Ils fonctionnent tous ensemble pour permettre aux développeurs de créer et d’exécuter des programmes Java. J’ai déjà présenté le JDK et la JVM. Dans cette présentation rapide, vous découvrirez le JRE, qui est l’environnement d’exécution de Java.

Pratiquement parlant, 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 :

  • La 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é de s’assurer que les applications Java disposent des ressources dont elles ont besoin pour s’exécuter et fonctionner correctement sur votre appareil ou votre environnement cloud.
  • La JRE est principalement un conteneur pour ces autres composants et est responsable de l’orchestration de leurs activités.

Nous allons creuser beaucoup plus profondément dans la façon dont ces composants fonctionnent ensemble dans la discussion qui suit.

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 dans lequel s’exécuter. Dans le passé, la plupart des logiciels utilisaient le système d’exploitation (OS) comme environnement d’exécution. Le programme s’exécutait à l’intérieur de n’importe quel ordinateur sur lequel il se trouvait et s’appuyait directement sur les paramètres du système d’exploitation pour l’accès aux ressources; ressources telles que la mémoire, l’accès au disque et l’accès au réseau. L’environnement d’exécution Java a changé tout cela, du moins pour les programmes Java. Dans le cas de Java et d’autres langages basés sur JVM, le JRE crée un intermédiaire entre le système d’exploitation et le programme réel. Le JRE charge les fichiers de classe et démarre une machine virtuelle (la JVM) qui garantit l’accès à la mémoire et aux autres ressources système sous une forme cohérente sur de nombreux systèmes d’exploitation.

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 au-dessus d’elle. L’environnement d’exécution Java génère une JVM, qui 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. La figure 1 illustre cette disposition.

diagramme jre IDG

Figure 1. L’environnement d’exécution Java génère une JVM.

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 Java, avec d’autres langages JVM comme Scala et Groovy. C’est un exemple classique de abstractionen faisant abstraction du système d’exploitation sous-jacent dans 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 chargé d’exécuter des programmes Java en direct. Le JRE est le composant logiciel sur disque qui prend votre code Java compilé (le code est compilé avec le JDK), le combine avec les bibliothèques requises 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 du JRE. Ce logiciel important charge le code Java compilé en mémoire et connecte le code aux bibliothèques de classes Java appropriées (un processus connu sous le nom de liaison).

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 illustré à la figure 2. La JVM fait partie du JRE : c’est la partie active en cours d’exécution que le JRE crée pour héberger les programmes. Le JRE prend des actifs statiques et les transforme en une JVM en cours d’exécution hébergeant le programme en cours d’exécution.

jw whatisjre fig1 IDG

Figure 2. Une vue architecturale en couches montre que le JRE contient la JVM, le chargeur de classe et les bibliothèques de classe Java.

Installation et utilisation du JRE

Bien qu’il y ait un côté conceptuel au JRE, dans la pratique, il ne s’agit que 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 plate-forme que vous utilisez pour développer et exécuter vos programmes Java. En tant qu’utilisateur d’application Java, vous serez davantage impliqué dans le JRE, qui vous permet d’exécuter ces programmes.

Java 9 a restructuré la plate-forme Java afin que le JRE ne soit désormais disponible que dans le cadre d’un JDK. Vous pouvez fournir un JRE fourni avec vos applications lorsque vous souhaitez livrer une application grand public à l’aide de JLink. Un tel bundle contient tous les composants nécessaires pour exécuter le programme. Pour nos besoins, nous utiliserons un JRE à l’intérieur du JDK. Vous pouvez télécharger le dernier JDK pour votre système à partir de la page Java SE d’Oracle. Windows et macOS ont des programmes d’installation automatisés qui géreront les détails (comme la définition du chemin). Sous Linux, une bonne option consiste à utiliser SDKMan. Dans tous les cas, vous souhaiterez que le JRE soit disponible à partir de votre ligne de commande afin de pouvoir utiliser le java commande.

Versions du 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, par exemple JRE 1.19 exécute Java 19.

De nombreux 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 manière 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. À l’avenir, les applications regroupées avec leur propre JRE via JLink deviendront la norme.

Une fois que vous avez téléchargé le JDK, vous pouvez interagir avec le JRE contenu sur la ligne de commande en tapant java -version, qui vous dira quelle version est installée. (Sur les systèmes POSIX, vous pouvez toujours vérifier l’emplacement d’installation avec la commande, 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. Il joue un rôle légèrement plus important dans les devops et l’administration des systèmes car le JRE 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 quotidien 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 approche basée sur le cloud pour créer et exécuter des logiciels. Si vous travaillez dans un environnement devops ou si vous souhaitez vous diversifier 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.

Mémoire Java et JRE

La mémoire Java se compose de trois composants : le tas, la pile et le méta-espace (qui était auparavant appelé permgen).

  • Métaespace est l’endroit où Java conserve les informations immuables de votre programme, telles que les définitions de classe.
  • Espace de tas est l’endroit où Java conserve le contenu variable.
  • Espace de pile est l’endroit où Java stocke l’exécution des fonctions et les références des variables.

Gestion de la mémoire Java depuis Java 8

Jusqu’à Java 8, le métaspace était connu sous le nom de permanent. En plus d’être un nom beaucoup plus cool, le métaspace est un changement significatif dans la façon dont les développeurs interagissent avec l’espace mémoire de Java. Auparavant, vous utilisiez la commande java -XX:MaxPermSize pour surveiller la taille de l’espace permgen. À partir de Java 8, Java augmente automatiquement la taille du méta-espace pour répondre aux méta-besoins de votre programme. Java 8 a également introduit un nouveau drapeau, MaxMetaspaceSizeque vous pouvez utiliser pour limiter la taille du méta-espace.

Configuration de l’espace de tas

Espace de tas est la partie la plus dynamique du système de mémoire Java. Vous pouvez utiliser le -Xms et -Xmx des drapeaux pour indiquer à Java la taille de démarrage du tas et la taille à lui permettre de devenir. Comprendre comment régler ces drapeaux pour les besoins spécifiques du programme est un aspect important de la gestion de la mémoire en Java. L’idéal est de rendre le tas suffisamment grand pour atteindre la collecte de déchets la plus efficace. Autrement dit, vous voulez allouer suffisamment de mémoire pour laisser le programme s’exécuter, mais vous ne voulez pas qu’elle soit plus grande que nécessaire.

Configuration de l’espace de pile

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 exception la plus notoire dans la programmation Java : la StackOverflowError (la première est la NullPointerException). La exception de débordement de pile indique que vous n’avez plus d’espace dans la pile car une trop grande quantité a été réservée. Habituellement, vous obtiendrez 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 fonction dans la pile.

Vous utilisez le -Xss commutateur pour configurer la taille de départ de la pile. La pile s’agrandit ensuite dynamiquement en fonction des besoins du programme.

Surveillance des applications Java

Bien que la surveillance des applications soit une fonction de la JVM, le 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 sophistiquées de surveillance à distance telles que la surveillance de l’infrastructure d’Oracle.

Entre ces options se trouvent des profileurs visuels comme VisualVM qui permettent d’inspecter une JVM en cours d’exécution. Ces outils permettent de détecter les points chauds 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 que la JVM doit exécuter. Un JRE est inclus par défaut lorsque vous téléchargez le JDK, et chaque JRE comprend les bibliothèques de classes Java principales, un chargeur de classes Java et une JVM. 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 le JRE ? Introduction à l’environnement d’exécution Java” a été initialement publiée par

JavaWorld.

Copyright © 2022 IDG Communications, Inc.