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 ».

  • 🧩 Pont de bytecode : Le Java Le compilateur produit du bytecode au lieu du code machine, et la JVM interprète ce bytecode sur n'importe quel système hôte.
  • ???? Core Archistructure : La JVM combine un chargeur de classes, une zone de méthodes, un tas, des piles, des registres PC et un moteur d'exécution pour exécuter les programmes.
  • (I.e. Flux de compilation : Contrairement à C, Java Ne nécessite aucune liaison ; les fichiers de classe sont chargés en RAM, vérifiés, puis exécutés lors de l’exécution.
  • | Compilateur JIT : Le compilateur Just-In-Time convertit le bytecode en code machine natif pendant l'exécution afin d'améliorer les performances.
  • ???? Remarque sur les performances : La liaison dynamique et l'interprétation à l'exécution ont historiquement joué un rôle déterminant. Java plus lentes, même si les versions modernes comblent en grande partie cet écart.

JVM 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, 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

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.

JVM Architecture

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.

Fonction principale du code C a1.c

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

Fonction de code C f1 a2.c

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

Fonction de code C f2 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.

Le compilateur de code C produit des fichiers objets

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.

L'éditeur de liens du code C produit un 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.

Le chargeur de code C charge l'exécutable dans la RAM

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

Java Le code compile trois fichiers en fichiers de classe.

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é.

Java Le chargeur de classes charge les fichiers de classes dans la RAM.

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.

Java Le moteur d'exécution convertit le bytecode en code natif

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:

  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 Javace qui ralentit encore davantage la vitesse.

Cependant, les dernières versions de Java ont largement remédié à ces problèmes de performance.

FAQ

La JVM exécute des frameworks d'IA et de big data tels que Deeplearning4j, Weka et Apache. SparkSon compilateur Just-In-Time et sa gestion de la mémoire permettent à ces bibliothèques de traiter efficacement de grands ensembles de données sur différentes plateformes sans réécrire le code natif.

Oui. Les profileurs assistés par IA peuvent analyser les journaux de ramasse-miettes, suggérer des tailles de tas et signaler les méthodes lentes. Ils permettent d'optimiser les options de la JVM et de repérer plus rapidement les goulots d'étranglement, même s'il est toujours recommandé au développeur de valider chaque modification proposée.

La JVM exécute le bytecode. Le JRE intègre la JVM ainsi que les bibliothèques essentielles à son exécution. Java Le JDK ajoute des outils de développement tels que le compilateur et le débogueur, et sert donc à créer des applications.

Le bytecode est indépendant de la plateforme, mais la JVM, elle, en dépend. Chaque système d'exploitation nécessite sa propre implémentation de la JVM. Cette conception permet d'exécuter le même bytecode compilé partout où une JVM compatible est installée.

Résumez cet article avec :