Qu'est-ce que la JVM ? Expliquez la JVM. Architecture
⚡ Résumé intelligent
Java La machine virtuelle (JVM) est le moteur qui fournit un environnement d'exécution pour piloter les applications. Java code, convertissant le bytecode indépendant de la plateforme en langage machine natif. Il fait partie du Java Environnement d'exécution et permet Javasa portabilité « écrire une fois, exécuter partout ».

Qu'est-ce que JVM dans Java?
Java Machine virtuelle (JVM) est un moteur qui fournit un environnement d'exécution pour piloter le Java code ou applications. Il convertit Java bytecode en langage machine. JVM fait partie de Java Environnement d'exécution (JRE). Dans d'autres langages de programmation, le compilateur produit du code machine pour un système particulier. Cependant, le Java le compilateur produit du code pour une machine virtuelle appelée Java Machine virtuelle.
Comment fonctionne la JVM ?
Tout d'abord, Java Le code est compilé en bytecode. Ce bytecode est interprété sur différentes machines. Entre le système hôte et le système distant, le code est interprété sur différentes machines. Java Le bytecode, langage intermédiaire, est utilisé dans la JVM. Java est responsable de l'allocation de l'espace mémoire.
Fonctionnement de Java Machine virtuelle (JVM)
Archistructure de la JVM (Java Machine virtuelle)
À présent, examinons l'architecture de la JVM. Architecture de la JVM dans Java Contient un chargeur de classes, une zone de mémoire, un moteur d'exécution, et plus encore.
Java Machine virtuelle Architecture
1) Chargeur de classe
Le chargeur de classes est un sous-système utilisé pour charger les fichiers de classes. Il remplit trois fonctions principales : le chargement, l’édition de liens et l’initialisation.
2) Domaine de la méthode
La zone de méthodes JVM stocke les structures de classe telles que les métadonnées, le pool d'exécution des constantes et le code des méthodes.
3) Tas
Tous les Objets, leurs variables d'instance associées et leurs tableaux sont stockés dans le tas. Cette mémoire est commune et partagée entre plusieurs threads.
4) Piles de langages JVM
Java Les piles d'exécution stockent les variables locales et leurs résultats partiels. Chaque thread possède sa propre pile JVM, créée simultanément à sa création. Un nouveau cadre est créé à chaque appel de méthode et supprimé une fois l'exécution terminée.
5) Registres PC
Le registre du PC stocke l'adresse du Java Instruction de machine virtuelle en cours d'exécution. Java, chaque thread possède son propre registre PC distinct.
6) Piles de méthodes natives
Les piles de méthodes natives contiennent les instructions du code natif qui dépendent de la bibliothèque native. Ce code est écrit dans un autre langage. Java.
7) Moteur d'exécution
Le moteur d'exécution lit le bytecode et l'exécute morceau par morceau. Il utilise un interpréteur et un compilateur JIT (Just-In-Time) pour convertir le bytecode en code machine natif et l'exécuter.
8) Interface de méthode native
La Native Method Interface est un framework de programmation. Il permet Java du code s'exécutant dans une JVM pour appeler, et être appelé par, des applications et des bibliothèques natives.
9) Bibliothèques de méthodes natives
Native Libraries est une collection des bibliothèques natives (C, C++) qui sont nécessaires au moteur d'exécution.
Logiciels Code Processus de compilation et d'exécution
Pour écrire et exécuter un programme logiciel, vous avez besoin des éléments suivants :
- 1) Éditeur – Pour saisir votre programme ; un bloc-notes peut être utilisé à cet effet.
- 2) Compilateur – Pour convertir votre programme en langage de haut niveau en code machine natif.
- 3) Éditeur de liens – Pour combiner les différentes références aux fichiers du programme dans votre programme principal.
- 4) Chargeur – Pour charger les fichiers depuis votre périphérique de stockage secondaire (disque dur, clé USB ou CD) dans la mémoire vive (RAM) en vue de leur exécution. Ce chargement s'effectue automatiquement lors de l'exécution de votre code.
- 5) Exécution – L’exécution effective du code, gérée par votre système d’exploitation et votre processeur.
Compte tenu de ces informations, reportez-vous à la vidéo suivante et découvrez le fonctionnement interne et l'architecture de la JVM (Java Machine Virtuelle).
Cliquez à nouveau ici si la vidéo n'est pas accessible
Processus de compilation et d’exécution du code C
Pour comprendre le Java Pour aborder le processus de compilation, jetons tout d'abord un rapide coup d'œil au processus de compilation et d'édition de liens en C.
Supposons que dans la fonction principale, vous ayez appelé deux fonctions, f1 et f2. La fonction principale est stockée dans le fichier a1.c.
La fonction f1 est stockée dans un fichier a2.c.
La fonction f2 est stockée dans un fichier a3.c.
Tous ces fichiers, c'est-à-dire a1.c, a2.c et a3.c, sont transmis au compilateur, dont la sortie est constituée des fichiers objets correspondants, qui sont le code machine.
L'étape suivante consiste à intégrer tous ces fichiers objets dans un seul fichier .exe à l'aide d'un éditeur de liens. Ce dernier regroupera tous ces fichiers et produira le fichier .exe.
Lors de l'exécution du programme, un programme de chargement chargera un fichier a.exe dans le répertoire. RAM pour exécution.
Java Compilation et exécution de code dans Java VM
Examinons maintenant le processus pour JavaDans votre fonction principale, vous avez deux méthodes, f1 et f2.
- La méthode principale est stockée dans le fichier a1.java
- f1 est stocké dans un fichier sous le nom a2.java
- f2 est stocké dans un fichier sous le nom a3.java
Le compilateur compilera les trois fichiers et produira trois fichiers .class correspondants, composés de code BYTE. Contrairement au C, aucune liaison n'est effectuée.
Le Java VM, ou Java La machine virtuelle réside dans la RAM. Lors de l'exécution, les fichiers de classe sont chargés dans la RAM via le chargeur de classes. Le code binaire est vérifié afin de détecter toute faille de sécurité.
Ensuite, le moteur d'exécution convertit le bytecode en code machine natif. C'est la compilation à la volée. C'est l'une des principales raisons pour lesquelles Java est relativement lent.
NOTE: Le JIT, ou compilateur juste-à-temps, est la partie du Java Machine virtuelle (JVM). Elle interprète simultanément des portions de code binaire ayant des fonctionnalités similaires.
Pourquoi est- Java Langage interprété et compilé ?
Langages de programmation sont classés comme suit :
- Langage de niveau supérieur, par exemple, C++, Java
- Langages de niveau intermédiaire, par exemple, C
- Langage de bas niveau, par exemple, Assembly
- Enfin, le niveau le plus bas est le langage machine.
A compilateur est un programme qui convertit un programme d'un niveau de langage à un autre. Par exemple, la conversion d'un C++ programmer en code machine. Java le compilateur convertit le haut niveau Java convertir le code en bytecode (qui est également un type de code machine).
An interprète est un programme qui convertit un programme d'un niveau à un autre langage de programmation au niveau même niveauPar exemple, la conversion d'un Java programme dans C++.
In JavaLe générateur de code Just-In-Time convertit le bytecode en code machine natif, qui se situe au même niveau de programmation. Par conséquent, Java est à la fois un langage compilé et interprété.
Pourquoi est- Java lent?
Les deux principales raisons de la lenteur du Java sont:
- Liaison dynamique : Contrairement au C, la liaison est effectuée au moment de l'exécution, à chaque fois que le programme est exécuté. Java.
- Interpréteur d'exécution : La conversion du byte code en code machine natif se fait au moment de l'exécution dans Javace qui ralentit encore davantage la vitesse.
Cependant, les dernières versions de Java ont largement remédié à ces problèmes de performance.











