La JVM(Java Virtual Machine) agit comme un moteur d’exécution pour exécuter les applications Java. La JVM est celle qui appelle réellement la méthode principale présente dans le code java. La JVM fait partie du JRE(Java Runtime Environment).

Les applications Java sont appelées WORA (Write Once Run Anywhere). Cela signifie qu’un programmeur peut développer du code Java sur un système et s’attendre à ce qu’il fonctionne sur n’importe quel autre système compatible Java sans aucun ajustement. Tout cela est possible grâce à la JVM.

Lorsque nous compilons un fichier .java, des fichiers .class(contient du byte-code) avec les mêmes noms de classe présents dans le fichier .java sont générés par le compilateur Java. Ce fichier .class passe par différentes étapes lorsque nous l’exécutons. Ces étapes décrivent ensemble l’ensemble de la JVM.

.

1) Classloader

Classloader est un sous-système de la JVM qui est utilisé pour charger les fichiers de classe. Chaque fois que nous exécutons le programme java, il est d’abord chargé par le classloader. Il y a trois chargeurs de classe intégrés dans Java.

  1. Bootstrap ClassLoader : C’est le premier chargeur de classe, qui est responsable du chargement des fichiers de classe à partir de rt.jar également appelé jar d’exécution.
  2. Le chargeur de classe d’extension : Il est responsable du chargement des fichiers de classe supplémentaires à partir du dossier jre lib ext (jre/lib/ext).
  3. Application ClassLoader : Le chargeur de classe d’application est celui qui charge les fichiers de classe à partir du jar spécifique à l’application. Ce dernier n’est rien d’autre que l’application que vous avez créée. Une fois que votre programme java est compilé, la JVM crée des fichiers de classe. Le chargeur de classe d’application charge ces fichiers de classe dans la zone de mémoire.

La liaison : Effectue la vérification, la préparation et (éventuellement) la résolution.

  1. Vérification : Elle assure l’exactitude du bytecode.
  2. Préparation : La JVM alloue de la mémoire pour les variables de classe et initialise la mémoire à des valeurs par défaut.
  3. Résolution : C’est le processus de remplacement des références symboliques du type par des références directes.

Initialisation

Dans cette phase, toutes les variables statiques sont affectées avec leurs valeurs définies dans le code et le bloc statique

2) Zone de données d’exécution

Le deuxième composant principal de l’architecture JVM est la zone de données d’exécution. De la même manière qu’une voiture a besoin d’une route, ou qu’un train a besoin d’une voie ferrée pour fonctionner, de la même manière, la JVM a besoin d’une zone mémoire pour stocker les fichiers de classe et les exécuter. Il existe 5 types de zones de données en mémoire. Ce sont la zone de méthode, la mémoire de tas, la mémoire de pile, les registres de PC et les piles de méthodes natives.

  1. Zone de méthode : Toutes les données de la classe sont stockées dans cette zone de mémoire.
  2. Zone de tas : Tous les objets et les variables d’instance sont stockés dans cette zone de mémoire.
  3. Zone de pile : Pour chaque thread, la JVM crée une pile d’exécution qui est stockée ici.
  4. Registre PC : Stocke l’adresse de l’instruction d’exécution actuelle d’un thread.
  5. Pile de méthode native : La pile de méthodes natives contient des informations sur les méthodes natives.

3) Moteur d’exécution

Le moteur d’exécution exécute le .class (bytecode). Il lit le byte-code ligne par ligne, utilise les données et informations présentes dans les différentes zones de mémoire et exécute les instructions. Il peut être classé en trois parties :-

  1. Interpréteur : Il compile le bytecode ligne par ligne et l’exécute ensuite. L’inconvénient ici est que lorsqu’une méthode est appelée plusieurs fois, chaque fois une interprétation est nécessaire.
  2. Compilateur Just-In-Time(JIT) : Il est utilisé pour augmenter l’efficacité de l’interpréteur. Il compile l’ensemble du bytecode et le modifie en code natif de sorte que chaque fois que l’interprète voit des appels de méthode répétés, JIT fournit du code natif direct pour cette partie, de sorte que la réinterprétation n’est pas nécessaire, donc l’efficacité est améliorée.
  3. Garbage Collector : Un objet qui n’est plus utilisé est supprimé par le ramasseur d’ordures.

.

Catégories : Articles

0 commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *