Qu'est-ce que JVM?
La machine virtuelle Java (JVM) est un moteur qui fournit un environnement d'exécution pour piloter le code Java ou les applications. Il convertit le bytecode Java en langage machine. JVM fait partie de Java Run Environment (JRE). Dans d'autres langages de programmation, le compilateur produit du code machine pour un système particulier. Cependant, le compilateur Java produit du code pour une machine virtuelle connue sous le nom de machine virtuelle Java.
Voici comment fonctionne JVM
Tout d'abord, le code Java est respecté en bytecode. Ce bytecode est interprété sur différentes machines
Entre système hôte et source Java, Bytecode est un langage intermédiaire.
La JVM en Java est responsable de l'allocation de l'espace mémoire.
![](https://cdn.css-code.org/6362169/jvm_what_is_java_virtual_machine_ampamp_its_architecture.jpg.webp)
Dans ce didacticiel JVM, vous apprendrez-
- Architecture JVM
- Processus de compilation et d'exécution de code logiciel
- Processus de compilation et d'exécution du code C
- Processus de compilation et d'exécution de code Java
- Pourquoi Java est-il à la fois interprété et langage compilé?
- Pourquoi Java est-il lent?
Architecture JVM
Maintenant, dans ce didacticiel JVM, comprenons l'architecture de JVM. L'architecture JVM en Java contient un chargeur de classe, une zone de mémoire, un moteur d'exécution, etc.![](https://cdn.css-code.org/6362169/jvm_what_is_java_virtual_machine_ampamp_its_architecture.png.webp)
1) ClassLoader
Le chargeur de classe est un sous-système utilisé pour charger les fichiers de classe. Il remplit trois fonctions principales à savoir. Chargement, liaison et initialisation.
2) Zone de méthode
La zone de méthodes JVM stocke les structures de classe telles que les métadonnées, le pool d'exécution constant et le code des méthodes.
3) tas
Tous les objets, leurs variables d'instance associées et les tableaux sont stockés dans le tas. Cette mémoire est commune et partagée entre plusieurs threads.
4) Piles de langage JVM
Les piles de langage Java stockent des variables locales et ses résultats partiels. Chaque thread possède sa propre pile JVM, créée simultanément lors de la création du thread. Un nouveau cadre est créé chaque fois qu'une méthode est appelée, et il est supprimé lorsque le processus d'appel de méthode est terminé.
5) Registres PC
Le registre PC stocke l'adresse de l'instruction de machine virtuelle Java en cours d'exécution. En Java, chaque thread a son registre PC distinct.
6) Piles de méthodes natives
Les piles de méthodes natives contiennent l'instruction du code natif qui dépend de la bibliothèque native. Il est écrit dans un autre langage au lieu de Java.
7) Moteur d'exécution
C'est un type de logiciel utilisé pour tester du matériel, des logiciels ou des systèmes complets. Le moteur d'exécution des tests ne contient aucune information sur le produit testé.
8) Interface de méthode native
L'interface de méthode native est un cadre de programmation. Il permet au code Java qui s'exécute dans une JVM d'être appelé par des bibliothèques et des applications natives.
9) Bibliothèques de méthodes natives
Les bibliothèques natives sont une collection de bibliothèques natives (C, C ++) dont le moteur d'exécution a besoin.
Processus de compilation et d'exécution de code logiciel
Pour écrire et exécuter un programme logiciel, vous avez besoin des éléments suivants
1) Éditeur - Pour taper votre programme, un bloc-notes peut être utilisé à cet effet
2) Compilateur - Pour convertir votre programme en langage élevé en code machine natif
3) Linker - Pour combiner différentes références de fichiers de programme dans votre programme principal.
4) Loader - Pour charger les fichiers de votre périphérique de stockage secondaire comme le disque dur, le lecteur flash, le CD dans la RAM pour exécution. Le chargement se fait automatiquement lorsque vous exécutez votre code.
5) Exécution - Exécution réelle du code qui est géré par votre système d'exploitation et votre processeur.
Dans ce contexte, reportez-vous à la vidéo suivante et découvrez le fonctionnement interne de la JVM et l'architecture de JVM (Java Virtual Machine).
Cliquez ici si la vidéo n'est pas accessible
Processus de compilation et d'exécution du code C
Comprendre le processus de compilation Java en Java. Jetons d'abord un coup d'œil rapide au processus de compilation et de liaison en C.
Supposons que dans l'ensemble, vous avez 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 envoyés au compilateur. Dont la sortie est les 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 de l'éditeur de liens. L'éditeur de liens regroupera tous ces fichiers et produira le fichier .exe.
Pendant l'exécution du programme, un programme de chargement chargera un.exe dans la RAM pour l'exécution.
Compilation et exécution de code Java dans Java VM
Maintenant, dans ce didacticiel JVM, examinons le processus pour JAVA. Dans votre main, 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 3 fichiers .class correspondants qui se composent de code BYTE. Contrairement à C, aucune liaison n'est effectuée .
La machine virtuelle Java ou la machine virtuelle Java réside sur la RAM. Pendant l'exécution, en utilisant le chargeur de classe, les fichiers de classe sont amenés sur la RAM. Le code BYTE est vérifié pour toute faille de sécurité.
Ensuite, le moteur d'exécution convertira le Bytecode en code machine natif. C'est juste à temps la compilation. C'est l'une des principales raisons pour lesquelles Java est relativement lent.
REMARQUE: le compilateur JIT ou Just-in-time fait partie de la machine virtuelle Java (JVM). Il interprète une partie du code d'octet qui a des fonctionnalités similaires en même temps.
Pourquoi Java est-il à la fois un langage interprété et compilé?
Les langages de programmation sont classés comme- Langue de niveau supérieur Ex. C ++, Java
- Langues de niveau intermédiaire Ex. C
- Assemblage Ex de langage de bas niveau
- enfin le niveau le plus bas en tant que langage machine.
Un compilateur est un programme qui convertit un programme d'un niveau de langage à un autre. Exemple de conversion d'un programme C ++ en code machine.
Le compilateur java convertit le code java de haut niveau en bytecode (qui est également un type de code machine).
Un interpréteur est un programme qui convertit un programme à un niveau en un autre langage de programmation au même niveau. Exemple de conversion d'un programme Java en C ++
En Java, le générateur Just In Time Code convertit le bytecode en code machine natif qui sont aux mêmes niveaux de programmation.
Par conséquent, Java est à la fois un langage compilé et interprété.
Pourquoi Java est-il lent?
Les deux principales raisons de la lenteur de Java sont
- Liaison dynamique: contrairement à C, la liaison est effectuée au moment de l'exécution, chaque fois que le programme est exécuté en Java.
- Interpréteur d' exécution : la conversion du code d'octet en code machine natif est effectuée au moment de l'exécution en Java, ce qui ralentit davantage la vitesse
Cependant, la dernière version de Java a résolu dans une large mesure les goulots d'étranglement des performances.
Résumé :
- La forme complète de JVM est Java Virtual Machine. JVM en Java est le moteur qui pilote le code Java. Il convertit le bytecode Java en langage machine.
- L'architecture JVM en Java contient un chargeur de classe, une zone de mémoire, un moteur d'exécution, etc.
- Dans JVM, le code Java est compilé en bytecode. Ce bytecode est interprété sur différentes machines
- JIT signifie compilateur juste à temps. JIT fait partie de la machine virtuelle Java (JVM). Il est utilisé pour accélérer le temps d'exécution
- En comparaison avec d'autres machines de compilation, JVM en Java peut être lent à l'exécution.