logo

Architecture JVM (machine virtuelle Java)

  1. Machine virtuelle Java
  2. Architecture interne de la JVM

JVM (Java Virtual Machine) est une machine abstraite. Il s'agit d'une spécification qui fournit un environnement d'exécution dans lequel le bytecode Java peut être exécuté.

Les JVM sont disponibles pour de nombreuses plates-formes matérielles et logicielles (c'est-à-dire que la JVM dépend de la plate-forme).

Java pour la boucle

Qu'est-ce que la JVM

C'est:

  1. Un cahier des charges où le fonctionnement de la machine virtuelle Java est spécifié. Mais le fournisseur d’implémentation est indépendant dans le choix de l’algorithme. Sa mise en œuvre a été assurée par Oracle et d'autres sociétés.
  2. Une mise en œuvre Son implémentation est connue sous le nom de JRE (Java Runtime Environment).
  3. Instance d'exécution Chaque fois que vous écrivez une commande Java sur l'invite de commande pour exécuter la classe Java, une instance de JVM est créée.

Ce qu'il fait

La JVM effectue l'opération suivante :

  • Code des charges
  • Vérifie le code
  • Exécute le code
  • Fournit un environnement d'exécution

JVM fournit des définitions pour :

comment refaire dans Photoshop
  • Zone mémoire
  • Format de fichier de classe
  • Ensemble de registres
  • Tas de déchets collectés
  • Rapport d'erreur fatale, etc.

Architecture JVM

Comprenons l'architecture interne de JVM. Il contient un chargeur de classe, une zone mémoire, un moteur d'exécution, etc.

Architecture JVM

1) Chargeur de classe

Classloader est un sous-système de JVM utilisé pour charger des fichiers de classe. Chaque fois que nous exécutons le programme Java, il est chargé en premier par le chargeur de classe. Il existe trois chargeurs de classes intégrés en Java.

    Chargeur de classe Bootstrap: Il s'agit du premier chargeur de classe qui est la super classe du chargeur de classe Extension. Il charge le rt.jar fichier qui contient tous les fichiers de classe de Java Standard Edition comme les classes de package java.lang, les classes de package java.net, les classes de package java.util, les classes de package java.io, les classes de package java.sql, etc.Chargeur de classe d'extension: Il s'agit du chargeur de classe enfant de Bootstrap et du chargeur de classe parent du chargeur de classe système. Il charge les fichiers jar situés à l'intérieur $JAVA_HOME/jre/lib/ext annuaire.Chargeur de classe système/application: Il s'agit du chargeur de classe enfant du chargeur de classe Extension. Il charge les fichiers de classe à partir du chemin de classe. Par défaut, le chemin de classe est défini sur le répertoire actuel. Vous pouvez modifier le chemin de classe à l'aide du commutateur « -cp » ou « -classpath ». Il est également connu sous le nom de chargeur de classe d'application.
 //Let's see an example to print the classloader name public class ClassLoaderExample { public static void main(String[] args) { // Let's print the classloader name of current class. //Application/System classloader will load this class Class c=ClassLoaderExample.class; System.out.println(c.getClassLoader()); //If we print the classloader name of String, it will print null because it is an //in-built class which is found in rt.jar, so it is loaded by Bootstrap classloader System.out.println(String.class.getClassLoader()); } } 
Testez-le maintenant

Sortir:

 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

Ce sont les chargeurs de classes internes fournis par Java. Si vous souhaitez créer votre propre chargeur de classe, vous devez étendre la classe ClassLoader.

2) Zone de classe (méthode)

La zone Classe (Méthode) stocke les structures par classe telles que le pool de constantes d'exécution, les données de champ et de méthode, le code des méthodes.

3) Tas

Il s'agit de la zone de données d'exécution dans laquelle les objets sont alloués.

4) Pile

Java Stack stocke les images. Il contient des variables locales et des résultats partiels, et joue un rôle dans l'invocation et le retour de méthodes.

texte souligné en CSS

Chaque thread possède une pile JVM privée, créée en même temps que le thread.

Un nouveau frame est créé à chaque fois qu'une méthode est invoquée. Une trame est détruite une fois l’invocation de sa méthode terminée.

5) Registre du compteur de programme

Le registre PC (compteur de programme) contient l'adresse de l'instruction de la machine virtuelle Java en cours d'exécution.

pseudo seulement

6) Pile de méthodes natives

Il contient toutes les méthodes natives utilisées dans l'application.

7) Moteur d'exécution

Il contient:

    Un processeur virtuel Interprète:Lisez le flux de bytecode puis exécutez les instructions.Compilateur juste à temps (JIT) :Il est utilisé pour améliorer les performances. JIT compile simultanément des parties du code d'octet qui ont des fonctionnalités similaires, ce qui réduit ainsi le temps nécessaire à la compilation. Ici, le terme « compilateur » fait référence à un traducteur du jeu d'instructions d'une machine virtuelle Java (JVM) vers le jeu d'instructions d'un processeur spécifique.

8) Interface native Java

Java Native Interface (JNI) est un framework qui fournit une interface pour communiquer avec une autre application écrite dans un autre langage comme C, C++, Assembly, etc. Java utilise le framework JNI pour envoyer la sortie à la console ou interagir avec les bibliothèques du système d'exploitation.