Architecture et composants Java expliqués [2022]
Publié: 2021-01-04Avant de devenir programmeur Java, vous devez comprendre tous les aspects de ce langage. L'architecture Java est l'un des aspects les plus cruciaux de Java. Un autre sujet technique à cet égard est la connaissance des composants de JVM. Nous couvrirons donc ces deux sujets critiques dans cet article.
Cet article suppose que vous avez une compréhension générale des bases de Java. Même si vous n'êtes pas familier avec les principes fondamentaux de Java, vous pouvez poser toutes les questions que vous pourriez avoir dans la section des commentaires ci-dessous. Commençons:
Table des matières
Architecture Java expliquée
Java a deux processus, la compilation et l'interprétation. Le compilateur Java convertit le code présent dans Java en byte codes. La Java Virtual Machine (JVM) convertit les byte codes en code machine que la machine exécute directement.
Nous pouvons décrire ce processus dans les étapes suivantes :
- Le code source va au compilateur Java
- Le compilateur Java le convertit en codes d'octet
- Les byte codes vont à la Java Virtual Machine
- Enfin, il va à l'OS (système d'exploitation)
Maintenant que nous connaissons un peu le fonctionnement de l'architecture Java, nous pouvons jeter un œil à ses différents composants :
JVM (machine virtuelle Java)
Les créateurs de Java voulaient que ce soit WORA (Write Once Run Anywhere). Cela signifie que vous pouvez exécuter ses applications sur n'importe quelle plate-forme, mais ce qui donne cette qualité à Java, c'est JVM. La JVM fournit l'environnement pour exécuter le code Java. Il interprète le bytecode et le convertit en code machine afin que la machine puisse exécuter le programme Java.

Les charges JVM vérifient et exécutent le code. Il fournit également l'environnement d'exécution au code afin qu'il puisse s'exécuter sur la machine.
JRE (environnement d'exécution Java)
Le JRE crée un environnement d'exécution dans lequel vous pouvez exécuter les programmes Java. Il prend le code Java et le combine avec les bibliothèques requises. Le JRE initie également la JVM pour son exécution. L'environnement d'exécution Java dispose des logiciels et des bibliothèques nécessaires pour que vous puissiez exécuter les programmes.
JDK (kit de développement Java)
Vous utiliseriez le JDK pour développer des applications et des programmes Java. Il s'agit d'un environnement de développement logiciel et contient plusieurs outils de développement, notamment le JRE, un compilateur, un interpréteur, un générateur de documentation et un archiveur avec d'autres.
Composants de JVM
Maintenant que vous êtes familiarisé avec l'architecture Java, examinons les composants de la JVM afin de mieux la comprendre. Comme la JVM effectue l'une des tâches les plus cruciales pour Java, elle comporte de nombreuses parties à cette fin. Nous allons discuter de chaque élément en détail :
Sous-système ClassLoader
ClassLoader est un sous-système de la machine virtuelle Java qui charge les fichiers de classe. C'est le premier composant de l'architecture car il charge le programme afin que d'autres tâches puissent avoir lieu. Il lie et initialise également les fichiers de classe. Nous pouvons diviser son fonctionnement en trois sections :
Chargement
Ce composant charge les classes. Il a le BootStrap ClassLoader pour charger les classes appartenant au chemin de classe bootstrap. L'Extension ClassLoader charge les classes situées dans le dossier ext, et l'Application ClassLoader charge le chemin mentionné dans la variable d'environnement et les fichiers similaires.
Mise en relation
Ici, le sous-système a un vérificateur pour vérifier si le bytecode est correct ou non. Si le bytecode n'est pas correct, il générera l'erreur de vérification. La section de liaison alloue la mémoire de toutes les variables statiques et attribue les valeurs par défaut. Il remplace également les références symboliques de la mémoire par des références originales.

Initialisation
Dans cette section de ClassLoading, le système affecte les variables statiques aux valeurs d'origine et exécute le bloc statique.
Zone de données d'exécution
Cette section de la JVM comprend les composants suivants :
Zone de méthode
La zone de méthode stocke toutes les données au niveau de la classe. Chaque JVM n'a qu'une seule zone de méthode.
Zone de tas
La zone de tas stocke tous les objets et leurs tableaux et variables d'instance. Comme la zone de méthode, une JVM n'a qu'une seule zone de tas.
Zone de pile
Cette section crée des piles d'exécution uniques pour chaque menace et crée une entrée pour chaque appel de méthode dans la mémoire de la pile (également appelée Stack Frame). Il a un tableau de variables locales qui est lié à la méthode, la pile d'opérandes, qui agit comme un espace de travail pour les opérations intermédiaires, et les données de trame, où tous les symboles liés à la méthode restent stockés. Les données de trame conservent les informations du bloc catch, sauf exception.
Registres PC
Chaque thread a des registres PC séparés qui contiennent l'adresse des instructions d'exécution. Une fois qu'une instruction a terminé son exécution, le registre du PC se met à jour avec la suivante.
Piles de méthodes natives
Comme son nom l'indique, cette section contient des informations sur la méthode native. Il crée une pile de méthodes natives unique pour chaque menace.
Vous devez noter que les deux premiers composants de la zone de données d'exécution (zone de méthode et zone de tas) sont des ressources partagées, contrairement à la zone de pile.
Moteur d'exécution
Le moteur d'exécution exécute le bytecode. Il le lit et l'exécute morceau par morceau. Il a également différents composants :
Interprète
Ce composant interprète le bytecode rapidement mais est un peu lent à l'exécution. Il présente un inconvénient important lorsque le système appelle une méthode plusieurs fois et nécessite une nouvelle interprétation à chaque fois. Cet inconvénient de l'interpréteur nuit considérablement à l'efficacité du processus.
Compilateur JIT
Le compilateur JIT n'a pas l'inconvénient de l'interpréteur. Ainsi, lorsque le moteur d'exécution trouve du code répété, il utilise le compilateur JIT au lieu de l'interpréteur. Le compilateur JIT convertit le bytecode en code natif après l'avoir compilé. Le système utilise directement le code natif.
Le compilateur JIT a le générateur de code intermédiaire pour produire du code intermédiaire et l'optimiseur de code pour l'optimiser. Il dispose également d'un générateur de code cible qui produit la biche native et d'un profil qui trouve les points chauds.
Éboueur
Le dernier composant du moteur d'exécution est le ramasse-miettes qui rassemble et supprime les objets non référencés. Vous pouvez le déclencher en appelant system.gc() mais cela ne garantit pas son exécution.

Outre ces composants, la JVM possède également les bibliothèques JNI (Java Native Interface) et Native Method. Le premier interagit avec le second et fournit les bibliothèques natives nécessaires à l'exécution.
Obtenez un cours de développement de logiciels dans les meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.
Dernières pensées
Nous avons essayé de garder cet article concis et utile, et nous sommes convaincus que vous l'avez trouvé informatif. Si vous avez des questions sur les composants de JVM ou sur l'architecture Java, vous pouvez nous les poser en nous contactant via les commentaires.
Vous pouvez en savoir plus sur Java et ses applications sur notre blog. Nous avons de nombreux guides et articles utiles qui couvrent divers aspects de ce langage de programmation robuste.
Si vous souhaitez en savoir plus sur Java, les OOP et le développement de logiciels à pile complète, consultez le programme Executive PG de upGrad & IIIT-B en développement de logiciels à pile complète qui est conçu pour les professionnels et offre plus de 500 heures de formation rigoureuse, Plus de 9 projets et affectations, statut d'ancien de l'IIIT-B, projets de synthèse pratiques et aide à l'emploi avec les meilleures entreprises.
