Maison  >  Article  >  Java  >  Introduction à la JVM

Introduction à la JVM

一个新手
一个新手original
2017-10-10 09:17:511870parcourir

Présentation de la JVM

1. Qu'est-ce que la JVM ?

JVM est l'abréviation de Java Virtual Machine. JVM est une spécification pour les appareils informatiques. Il s'agit d'un ordinateur fictif qui est simulé par simulation sur un ordinateur réel. La machine virtuelle Java comprend un ensemble d'instructions de bytecode, un ensemble de registres, une pile, un tas de garbage collection et un champ de méthode de stockage. La JVM protège les informations relatives à la plate-forme spécifique du système d'exploitation, de sorte que le programme Java n'a besoin que de générer le code cible (bytecode) qui s'exécute sur la machine virtuelle Java et peut s'exécuter sur diverses plates-formes sans modification. Lorsque la JVM exécute le bytecode, elle interprète finalement le bytecode en instructions machine à exécuter sur la plate-forme spécifique.

Une caractéristique très importante du langage Java est son indépendance par rapport à la plateforme. L'utilisation de la machine virtuelle Java est la clé pour réaliser cette fonctionnalité. Si un langage général de haut niveau souhaite fonctionner sur différentes plates-formes, il doit au moins être compilé en différents codes cibles. Après l'introduction de la machine virtuelle du langage Java, le langage Java n'a plus besoin d'être recompilé lorsqu'il est exécuté sur différentes plates-formes. Le langage Java utilise la machine virtuelle Java pour protéger les informations liées à des plates-formes spécifiques, de sorte que le compilateur du langage Java n'a besoin que de générer le code cible (bytecode) qui s'exécute sur la machine virtuelle Java et peut s'exécuter sur plusieurs plates-formes sans modification. . Lorsque la machine virtuelle Java exécute le bytecode, elle interprète le bytecode en instructions machine à exécuter sur la plate-forme spécifique. C'est pourquoi Java peut « compiler une fois, s'exécuter n'importe où ».

2. Quelle est la relation entre JRE/JDK/JVM ?

JRE (JavaRuntimeEnvironment, environnement d'exécution Java), qui est la plateforme Java. Tous les programmes Java doivent s'exécuter sous JRE. Les utilisateurs ordinaires n'ont qu'à exécuter le programme Java développé et à installer JRE.

JDK (Java Development Kit) est un kit d'outils de développement utilisé par les développeurs de programmes pour compiler et déboguer des programmes Java. Les outils JDK sont également des programmes Java et nécessitent JRE pour s'exécuter. Afin de maintenir l'indépendance et l'intégrité du JDK, JRE fait également partie de l'installation lors du processus d'installation du JDK. Par conséquent, il existe un répertoire nommé jre dans le répertoire d'installation du JDK, qui est utilisé pour stocker les fichiers JRE.

JVM (JavaVirtualMachine, machine virtuelle Java) fait partie du JRE. Il s’agit d’un ordinateur fictif implémenté en simulant diverses fonctions informatiques sur un ordinateur réel. JVM possède sa propre architecture matérielle complète, telle qu'un processeur, une pile, des registres, etc., et dispose également d'un système d'instructions correspondant. La fonctionnalité la plus importante du langage Java est le fonctionnement multiplateforme. Le but de l'utilisation de JVM est de prendre en charge l'indépendance du système d'exploitation et de réaliser des opérations multiplateformes.

3. Principe JVM

JVM est le cœur et le fondement de Java, un processeur virtuel entre le compilateur Java et la plateforme OS. Il s'agit d'un ordinateur abstrait basé sur le système d'exploitation sous-jacent et la plate-forme matérielle implémentée à l'aide de méthodes logicielles, sur lesquelles des programmes de bytecode Java peuvent être exécutés.

Le compilateur Java doit seulement être orienté vers la JVM et générer des fichiers de code ou de bytecode que la JVM peut comprendre. Les fichiers sources Java sont compilés dans des programmes de bytecode, et chaque instruction est traduite en code machine pour différentes plates-formes via la JVM et exécutée sur une plate-forme spécifique.

4. Le processus de JVM exécutant le programme

1) Charger le fichier .class 2) Gérer et allouer la mémoire 3) Effectuer le garbage collection

JRE (environnement d'exécution Java) est l'environnement d'exécution du programme Java construit par la JVM. C'est également l'environnement dans lequel le programme Java s'exécute. Cependant, il s'agit à la fois d'une application et d'un processus d'un système d'exploitation. temps, il a donc également son propre cycle de vie, ainsi que son propre code et son propre espace de données. La JVM se trouve au bas de l'ensemble du jdk et est responsable de l'interaction du système d'exploitation. Elle est utilisée pour protéger l'environnement du système d'exploitation et fournir un environnement d'exécution Java complet, c'est donc également un ordinateur virtuel. Le système d'exploitation est chargé dans la JVM via Java.exe dans le jdk. L'environnement JVM est complété par les quatre étapes suivantes : 1) Créer l'environnement de chargement et la configuration JVM 2) Charger le JVM.dll 3) Initialiser le JVM.dll. et montez-le sur l'instance JNIENV (interface d'appel JNI). 4) Appelez l'instance JNIEnv pour charger et traiter la classe.

5. Cycle de vie de la JVM

1) Une instance JVM correspond à un programme Java exécuté de manière indépendante et démarré au niveau du processus
a). Lorsqu'un programme Java est démarré, une instance JVM est générée. Toute classe avec une fonction public static void
main(String[] args) peut être utilisée comme point de départ pour exécuter l'instance JVM
b). main() sert de point de départ au thread initial du programme, et tous les autres threads sont démarrés par ce thread. Il existe deux types de threads à l'intérieur de la JVM : les threads démons et les threads non-démons. main() appartient au thread non-démon. Le thread démon est généralement utilisé par la JVM elle-même. Le programme Java peut également indiquer que le thread est celui-ci. créé est un thread démon
c) Mort. La JVM se fermera lorsque tous les threads non démons du programme se termineront ; si le gestionnaire de sécurité le permet, le programme peut également utiliser la classe Runtime ou System.exit() pour quitter

2) L'instance du moteur d'exécution JVM correspond au thread appartenant au programme utilisateur exécutant, qui est au niveau du thread

6. Architecture JVM

  • ClassLoader (utilisé pour charger des fichiers .class)

  • Moteur d'exécution (exécuter le bytecode ou exécuter des méthodes locales)

  • Zone de données d'exécution (zone de méthode, tas, pile Java, registre PC, pile de méthodes locale)

Zone de données d'exécution JVM

Premier bloc : registre PC

Le registre PC est utilisé pour stocker chaque thread L'instruction JVM à exécuter ensuite, si le La méthode est native, aucune information n’est stockée dans le registre du PC.

Deuxième bloc : pile JVM

La pile JVM est privée au thread Lorsque chaque thread est créé, une pile JVM sera créée. La pile JVM est le thread actuel. Variables des types de base locaux (les huit types de base définis en Java : boolean, char, byte, short, int, long, float, double), résultats de retour partiel et Stack Frame, objets de type non basique. sur la pile JVM Stocke uniquement une adresse pointant vers le tas.

Le troisième bloc : Heap

C'est la zone utilisée par la JVM pour stocker les instances d'objets et les valeurs de tableau. On peut considérer que tous les objets créés par new in. Java Toute la mémoire est allouée ici et la mémoire des objets dans le tas doit attendre que le GC soit recyclé.

(1) Le tas est partagé par tous les threads de la JVM, donc l'allocation de mémoire d'objet dessus nécessite un verrouillage, ce qui entraîne également une surcharge de nouveaux objets. large

(2) Afin d'améliorer l'efficacité de l'allocation de mémoire des objets, Sun Hotspot JVM allouera un espace indépendant TLAB (Thread Local Allocation Buffer) pour les threads créés, et sa taille est déterminée par la JVM en fonction à l'exécution Selon les calculs, le verrouillage n'est pas requis lors de l'allocation d'objets sur TLAB. Par conséquent, lorsque la JVM alloue de la mémoire aux objets thread, elle fera de son mieux pour l'allouer sur le TLAB. Dans ce cas, les performances d'allocation de mémoire d'objet. dans la JVM est fondamentalement le même que celui du C. Tout aussi efficace, mais si l'objet est trop volumineux, l'allocation d'espace de tas est toujours utilisée directement

(3) TLAB n'agit que sur l'Eden Space du nouveau génération, donc lors de l'écriture d'un programme Java, il est généralement plus efficace d'allouer plusieurs petits objets que de gros objets.

(4) Tous les objets nouvellement créés seront stockés dans la nouvelle génération Yong Generation. Si les données de Jeune Génération survivent à un ou plusieurs GC, elles seront transférées à Ancienne Génération. De nouveaux objets sont toujours créés dans Eden Space.

Le quatrième bloc : Method Area (Method Area)

(1) Dans Sun JDK, cette zone correspond à PermanetGeneration, également connue sous le nom de génération persistante.

(2) La zone de méthode stocke les informations de la classe chargée (nom, modificateur, etc.), les variables statiques de la classe, les constantes définies comme type final dans la classe, les informations de champ dans la classe et Informations sur la méthode. Lorsque les développeurs obtiennent des informations via getName, isInterface et d'autres méthodes dans l'objet Class du programme, ces données proviennent de la zone de méthode. En même temps, la zone de méthode est également partagée globalement. be GC, lorsque la mémoire requise par la zone de méthode dépasse sa taille autorisée, un message d'erreur OutOfMemory sera généré.

Le cinquième bloc : Runtime Constant Pool

stocke les informations constantes fixes, les informations de référence de méthode et de champ dans la classe, etc. Son espace est alloué à partir de la zone de méthode.

Le sixième bloc : Native Method Stacks (Native Method Stacks)

JVM utilise des piles de méthodes natives pour prendre en charge l'exécution des méthodes natives. Cette zone est utilisée pour stocker chacune d'elles. native L'état de l'appel de méthode.

8. Le principe de base du garbage collection JVM

GC (Garbage Collection) : recycler les objets qui ne sont plus utilisés en mémoire. La méthode utilisée pour le recyclage dans GC est appelée collecteur. Étant donné que GC doit consommer des ressources et du temps, Java collecte les objets selon la nouvelle génération et l'ancienne génération après avoir analysé les caractéristiques du cycle de vie des objets, afin de maximiser la collecte d'objets. . Raccourcissement possible de la pause provoquée par GC à l'application

(1) La collection d'objets dans la nouvelle génération est appelée GC mineure

(2) La collection d'objets dans l'ancienne ; la génération est appelée Full GC

(3) Le GC forcé en appelant activement System.gc() dans le programme est Full GC.

Différents types de références d'objets, GC utilisera différentes méthodes pour recycler les références d'objets JVM sont divisées en quatre types :

(1) Référence forte : Par défaut, les objets utilisent des références fortes (les instances de cet objet n'ont pas d'autres références d'objet et seront recyclées uniquement dans GC)

(2) Référence soft : la référence soft est une application fournie en Java qui est plus adaptée aux scénarios de mise en cache (elle ne sera GCée que lorsque la mémoire n'est pas suffisante)

(3) Référence faible : elle sera définitivement recyclée par GC lors de GC

(4) Référence virtuelle : Puisque la référence virtuelle ne sert qu'à savoir si l'objet a été GC

Le contenu principal provient de : http://baike.baidu.com/link ? _78MJUrHq46ZS-8OsHDCMKkwmJTmXkPrkBZmbNqOA49iDyxsLIkm

1. Qu'est-ce que la JVM ?

JVM est l'abréviation de Java Virtual Machine. JVM est une spécification pour les appareils informatiques. Il s'agit d'un ordinateur fictif qui est simulé sur un ordinateur réel. La machine virtuelle Java comprend un ensemble d'instructions de bytecode, un ensemble de registres, une pile, un tas de garbage collection et un champ de méthode de stockage. La JVM protège les informations relatives à la plate-forme spécifique du système d'exploitation, de sorte que le programme Java n'a besoin que de générer le code cible (bytecode) qui s'exécute sur la machine virtuelle Java et peut s'exécuter sur diverses plates-formes sans modification. Lorsque la JVM exécute le bytecode, elle interprète finalement le bytecode en instructions machine à exécuter sur la plate-forme spécifique.

Une caractéristique très importante du langage Java est son indépendance par rapport à la plateforme. L'utilisation de la machine virtuelle Java est la clé pour réaliser cette fonctionnalité. Si un langage général de haut niveau souhaite fonctionner sur différentes plates-formes, il doit au moins être compilé en différents codes cibles. Après l'introduction de la machine virtuelle du langage Java, le langage Java n'a plus besoin d'être recompilé lorsqu'il est exécuté sur différentes plates-formes. Le langage Java utilise la machine virtuelle Java pour protéger les informations liées à des plates-formes spécifiques, de sorte que le compilateur du langage Java n'a besoin que de générer le code cible (bytecode) qui s'exécute sur la machine virtuelle Java et peut s'exécuter sur plusieurs plates-formes sans modification. . Lorsque la machine virtuelle Java exécute le bytecode, elle interprète le bytecode en instructions machine à exécuter sur la plate-forme spécifique. C'est pourquoi Java peut « compiler une fois, s'exécuter n'importe où ».

2. Quelle est la relation entre JRE/JDK/JVM ?

JRE (JavaRuntimeEnvironment, environnement d'exécution Java), qui est la plateforme Java. Tous les programmes Java doivent s'exécuter sous JRE. Les utilisateurs ordinaires n'ont qu'à exécuter le programme Java développé et à installer JRE.

JDK (Java Development Kit) est un kit d'outils de développement utilisé par les développeurs de programmes pour compiler et déboguer des programmes Java. Les outils JDK sont également des programmes Java et nécessitent JRE pour s'exécuter. Afin de maintenir l'indépendance et l'intégrité du JDK, JRE fait également partie de l'installation lors du processus d'installation du JDK. Par conséquent, il existe un répertoire nommé jre sous le répertoire d'installation du JDK, qui est utilisé pour stocker les fichiers JRE.

JVM (JavaVirtualMachine, machine virtuelle Java) fait partie du JRE. Il s’agit d’un ordinateur fictif implémenté en simulant diverses fonctions informatiques sur un ordinateur réel. JVM possède sa propre architecture matérielle complète, telle qu'un processeur, une pile, des registres, etc., et dispose également d'un système d'instructions correspondant. La fonctionnalité la plus importante du langage Java est le fonctionnement multiplateforme. Le but de l’utilisation de JVM est de prendre en charge la mise en œuvre indépendante du système d’exploitation et multiplateforme.

3. Principe JVM

JVM est le cœur et le fondement de Java, un processeur virtuel entre le compilateur Java et la plateforme OS. Il s'agit d'un ordinateur abstrait basé sur le système d'exploitation sous-jacent et la plate-forme matérielle implémentée à l'aide de méthodes logicielles, sur lesquelles des programmes de bytecode Java peuvent être exécutés.

Le compilateur Java doit seulement être orienté vers la JVM et générer des fichiers de code ou de bytecode que la JVM peut comprendre. Les fichiers sources Java sont compilés dans des programmes de bytecode, et chaque instruction est traduite en code machine pour différentes plates-formes via la JVM et exécutée sur une plate-forme spécifique.

4. Le processus de JVM exécutant le programme

1) Charger le fichier .class 2) Gérer et allouer la mémoire 3) Exécuter garbage collection

JRE (Java Runtime Environment) est l'environnement d'exécution du programme Java construit par la JVM. C'est aussi l'environnement dans lequel le programme Java s'exécute. Cependant, c'est un système d'exploitation, une application. et un processus en même temps, il a donc aussi son propre cycle de vie en cours d'exécution a également son propre espace de code et de données. La JVM se trouve au bas de l'ensemble du jdk et est responsable de l'interaction du système d'exploitation. Elle est utilisée pour protéger l'environnement du système d'exploitation et fournir un environnement d'exécution Java complet, c'est donc également un ordinateur virtuel. Le système d'exploitation est chargé dans la JVM via Java.exe dans le jdk. L'environnement JVM est complété par les quatre étapes suivantes : 1) Créer l'environnement de chargement et la configuration JVM 2) Charger le JVM.dll 3) Initialiser le JVM.dll. et montez-le sur l'instance JNIENV (interface d'appel JNI). 4) Appelez l'instance JNIEnv pour charger et traiter la classe.

5. Cycle de vie de la JVM

1) L'instance JVM correspond à un programme Java exécuté indépendamment, qui est démarré au niveau du processus
a). Lorsqu'un programme Java est démarré, une instance JVM est générée. Toute classe avec une fonction public static void
main(String[] args) peut être utilisée comme point de départ pour exécuter l'instance JVM
b). main() sert de point de départ au thread initial du programme, et tous les autres threads sont démarrés par ce thread. Il existe deux types de threads à l'intérieur de la JVM : les threads démons et les threads non-démons. main() appartient au thread non-démon. Le thread démon est généralement utilisé par la JVM elle-même. Le programme Java peut également indiquer que le thread est celui-ci. créé est un fil démon
c) Mort. La JVM se fermera lorsque tous les threads non démons du programme se termineront ; si le gestionnaire de sécurité le permet, le programme peut également utiliser la classe Runtime ou System.exit() pour quitter

2) L'instance du moteur d'exécution JVM correspond au thread appartenant au programme utilisateur en cours d'exécution, qui est au niveau du thread

6. Architecture JVM


  • ClassLoader (utilisé pour charger les fichiers .class)

  • Moteur d'exécution (exécuter le bytecode ou exécuter des méthodes locales)

  • Zone de données d'exécution (zone de méthode, tas, pile Java, registre PC, pile de méthodes locale)

7. Zone de données d'exécution JVM

Premier bloc : registre PC

Le registre PC est utilisé pour stocker les instructions JVM que chaque thread exécutera ensuite. Si la méthode est native, aucune information n'est stockée dans le registre PC.

Deuxième bloc : pile JVM

La pile JVM est privée au thread Lorsque chaque thread est créé, une pile JVM sera créée. La pile JVM est le thread actuel. Variables des types de base locaux (les huit types de base définis en Java : boolean, char, byte, short, int, long, float, double), résultats de retour partiel et Stack Frame, objets de type non basique. sur la pile JVM Stocke uniquement une adresse pointant vers le tas.

Le troisième bloc : Heap

C'est la zone utilisée par la JVM pour stocker les instances d'objets et les valeurs de tableau. On peut considérer que tous les objets créés par new in. Java Toute la mémoire est allouée ici et la mémoire des objets dans le tas doit attendre que le GC soit recyclé.

(1) Le tas est partagé par tous les threads de la JVM, donc l'allocation de mémoire d'objet dessus nécessite un verrouillage, ce qui entraîne également une surcharge de nouveaux objets. large

(2) Afin d'améliorer l'efficacité de l'allocation de mémoire des objets, Sun Hotspot JVM allouera un espace indépendant TLAB (Thread Local Allocation Buffer) pour les threads créés, et sa taille est déterminée par la JVM en fonction à l'exécution Selon les calculs, le verrouillage n'est pas requis lors de l'allocation d'objets sur TLAB. Par conséquent, lorsque la JVM alloue de la mémoire aux objets thread, elle fera de son mieux pour l'allouer sur le TLAB. Dans ce cas, les performances d'allocation de mémoire d'objet. dans la JVM est fondamentalement le même que celui du C. Tout aussi efficace, mais si l'objet est trop volumineux, l'allocation d'espace de tas est toujours utilisée directement

(3) TLAB n'agit que sur l'Eden Space du nouveau génération, donc lors de l'écriture d'un programme Java, il est généralement plus efficace d'allouer plusieurs petits objets que de gros objets.

(4) Tous les objets nouvellement créés seront stockés dans la nouvelle génération Yong Generation. Si les données de Jeune Génération survivent à un ou plusieurs GC, elles seront transférées à Ancienne Génération. De nouveaux objets sont toujours créés dans Eden Space.

Le quatrième bloc : Method Area (Method Area)

(1) Dans Sun JDK, cette zone correspond à PermanetGeneration, également connue sous le nom de génération persistante.

(2) La zone de méthode stocke les informations de la classe chargée (nom, modificateur, etc.), les variables statiques de la classe, les constantes définies comme type final dans la classe, les informations de champ dans la classe et Informations sur la méthode. Lorsque les développeurs obtiennent des informations via getName, isInterface et d'autres méthodes dans l'objet Class du programme, ces données proviennent de la zone de méthode. En même temps, la zone de méthode est également partagée globalement. be GC, lorsque la mémoire requise par la zone de méthode dépasse sa taille autorisée, un message d'erreur OutOfMemory sera généré.

Le cinquième bloc : Runtime Constant Pool

stocke les informations constantes fixes, les informations de référence de méthode et de champ dans la classe, etc. Son espace est alloué à partir de la zone de méthode.

Le sixième bloc : Native Method Stacks (Native Method Stacks)

JVM utilise des piles de méthodes natives pour prendre en charge l'exécution des méthodes natives. Cette zone est utilisée pour stocker chacune d'elles. native L'état de l'appel de méthode.

8. Le principe de base du garbage collection JVM

GC (Garbage Collection) : recycler les objets qui ne sont plus utilisés dans la mémoire. La méthode de recyclage est appelée collecteur. Puisque GC nécessite des ressources et du temps, Java collecte les objets selon la nouvelle génération et l'ancienne génération après avoir analysé les caractéristiques du cycle de vie des objets pour raccourcir autant que possible le temps de pause. causé par GC à l'application

(1) La collection d'objets de la nouvelle génération est appelée GC mineure

(2) La collection d'objets de l'ancienne génération est appelée GC complète ;

(3) Le GC forcé en appelant activement System.gc() dans le programme est Full GC.

Différents types de références d'objet, GC utilisera différentes méthodes pour recycler. Les références d'objet JVM sont divisées en quatre types :

(1) Référence forte : par défaut, l'objet utilise Toutes sont des références fortes. (l'instance de cet objet n'a pas d'autres références d'objet et sera recyclée uniquement dans GC)

(2) Soft reference : Soft reference est une application fournie en Java qui est plus adaptée aux scénarios de mise en cache (elle ne fera que être GCed lorsque la mémoire n'est pas suffisante)

(3) Référence faible : elle sera recyclée par GC lors du GC

(4) Référence virtuelle : Puisque la référence virtuelle n'est utilisée que Pour savoir si l'objet a été GC

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn