Qu'est-ce que la JVM ? Java Machine virtuelle Architecture

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, 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 Java source, Bytecode est un langage intermédiaire. JVM dans Java est responsable de l'allocation de l'espace mémoire.


Comment fonctionne la JVM
Fonctionnement de Java Machine virtuelle (JVM)

Dans ce didacticiel JVM, vous apprendrez-

Archistructure de la JVM (Java Machine virtuelle)

Maintenant, dans ce didacticiel JVM, comprenons le Archistructure de la JVM. Architecture JVM dans Java contient un chargeur de classe, une zone mémoire, un moteur d'exécution, etc.

 


JVM Architecture
Java Machine virtuelle Architecture

1) Chargeur de classe
Le chargeur de classe est un sous-système utilisé pour charger des fichiers de classe. Il remplit trois fonctions principales, à savoir. Chargement, liaison et initialisation.

2) Domaine de la méthode
La zone de méthode 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 leurs tableaux sont stockés dans le tas. Cette mémoire est commune et partagée entre plusieurs threads.

4) Piles de langage JVM
Java Les piles de langage stockent les variables locales et leurs résultats partiels. Chaque thread possède sa propre pile JVM, créée simultanément à la création du thread. Une nouvelle trame est créée chaque fois qu'une méthode est invoquée et elle est supprimée lorsque le processus d'invocation de la méthode est terminé.

5) Registres PC
Le registre PC stocke l'adresse du Java instruction de machine virtuelle en cours d'exécution. Dans Java, chaque thread a son registre PC séparé.

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. Il est écrit dans une autre langue au lieu de Java.

7) Moteur d'exécution
Il s'agit d'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 jamais d'informations sur le produit testé.

8) Interface de méthode native
La Native Method Interface est un framework de programmation. Il permet Java code qui s'exécute dans une JVM pour être appelé par les bibliothèques et les applications natives.

9) Bibliothèques de méthodes natives
Native Libraries est une collection de bibliothèques natives(C, C++) qui sont nécessaires au moteur d'exécution.

Processus de compilation et d’exécution du code logiciel

Pour écrire et exécuter un 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 de langage avancé en code machine natif

3) Éditeur de liens – Pour combiner différentes références de fichiers de programme dans votre programme principal.

4) Chargeur – 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 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 et l'architecture de la JVM (Java Machine Virtuelle).

Cliquez sur ici. si la vidéo n'est pas accessible

Processus de compilation et d’exécution du code C

Pour comprendre le Java processus de compilation dans JavaCommençons d’abord par jeter un rapide coup d’œil au processus de compilation et de liaison en C.

Supposons que dans le fichier principal, vous ayez appelé deux fonctions f1 et f2. La fonction principale est stockée dans le fichier a1.c.

Processus de compilation et d’exécution du code C

La fonction f1 est stockée dans un fichier a2.c

Processus de compilation et d’exécution du code C

La fonction f2 est stockée dans un fichier a3.c

Processus de compilation et d’exécution du code 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.

Processus de compilation et d’exécution du code C

L'étape suivante consiste à intégrer tous ces fichiers objets dans un seul fichier .exe à l'aide d'un éditeur de liens. L’éditeur de liens regroupera tous ces fichiers et produira le fichier .exe.

Processus de compilation et d’exécution du code C

Pendant l'exécution du programme, un programme de chargement chargera un.exe dans le RAM pour l'exécution.

Processus de compilation et d’exécution du code C

Java Compilation et exécution de code dans Java VM

Maintenant, dans ce didacticiel JVM, examinons le processus pour JAVA. Dans votre main, vous disposez de 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

Java Compilation et exécution de code dans Java VM

Le compilateur compilera les trois fichiers et produira 3 fichiers .class correspondants constitués de code BYTE. Contrairement au C, aucune liaison n'est effectuée.

Les Java VM ou Java La machine virtuelle réside dans la RAM. Lors de l'exécution, à l'aide du chargeur de classes, les fichiers de classe sont transférés dans la RAM. Le code BYTE est vérifié pour détecter toute faille de sécurité.

Java Compilation et exécution de code dans Java VM

Ensuite, le moteur d'exécution convertira le Bytecode en code machine natif. Il s'agit d'une compilation juste à temps. C'est l'une des principales raisons pour lesquelles Java est relativement lent.

Java Compilation et exécution de code dans Java VM

NOTE: JIT ou le compilateur juste à temps fait partie du Java Machine virtuelle (JVM). Il interprète en même temps une partie du Byte Code qui a des fonctionnalités similaires.

Pourquoi est- Java Langage interprété et compilé ?

Langages de programmation sont classés comme

  • Langue de niveau supérieur Ex. C++, Java
  • Langues de niveau intermédiaire Ex. C
  • Examen de langage de bas niveau Assembly
  • enfin le niveau le plus bas comme le Langage Machine.

A compilateur est un programme qui convertit un programme d'un niveau de langage à un autre. Exemple de conversion de C++ programme en code machine. Le compilateur Java convertit le code Java de haut niveau en bytecode (qui est également un type de code machine).

An interprète est un programme qui convertit un programme à un niveau vers un autre langage de programmation au niveau même niveau. Exemple de conversion de Java programme dans C++

In Java, le générateur de code juste à temps convertit le bytecode en code machine natif qui se situe aux mêmes niveaux 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 sommes-nous

  1. 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.
  2. Interpréteur d'exécution : La conversion du byte code en code machine natif se fait au moment de l'exécution dans Java ce qui ralentit encore la vitesse

Cependant, la dernière version de Java a résolu dans une large mesure les goulots d’étranglement en matière de performances.

Résumé:

  • La forme complète de JVM est Java Machine virtuelle. JVM dans Java est le moteur qui entraîne le Java Code. Il convertit Java bytecode en langage machine.
  • Architecture JVM dans Java contient un chargeur de classe, une zone mémoire, un moteur d'exécution, etc.
  • Dans la JVM, Java le code est compilé en bytecode. Ce bytecode est interprété sur différentes machines
  • JIT signifie Compilateur juste à temps. JIT fait partie du Java Machine virtuelle (JVM). Elle est utilisée pour accélérer le temps d'exécution
  • Par rapport aux autres machines de compilateur, JVM dans Java peut être lent à exécuter.