Maison >Java >javaDidacticiel >Présentation détaillée de la machine virtuelle Java

Présentation détaillée de la machine virtuelle Java

PHP中文网
PHP中文网original
2017-06-20 14:35:161674parcourir

1. Présentation de la machine virtuelle Java

Le système technologique Java officiellement défini par Oracle comprend principalement les parties suivantes :

  • Programmation Java Langage

  • Machine virtuelle Java pour diverses plateformes

  • Format de fichier de classe

  • Bibliothèque de classes API Java

  • Bibliothèque de classes Java tierce

Les trois parties du langage de programmation Java, de la machine virtuelle Java et de la bibliothèque de classes API Java peuvent être collectivement référencées comme JDK (Java Development Kit), qui est l'environnement minimum pour le développement de programmes Java. De plus, le sous-ensemble de l'API Java SE et la machine virtuelle Java de l'API Java sont collectivement appelés JRE (Java Runtime Environment), qui est l'environnement standard d'exécution des programmes Java.

La raison pour laquelle la machine virtuelle Java est appelée « virtuelle » est qu'il s'agit simplement d'un ordinateur abstrait défini par une spécification

2. 🎜>De nombreux étudiants peuvent penser que la machine virtuelle Java n'est qu'une machine virtuelle. A-t-elle une famille ? Ou pensez que la machine virtuelle Java fait référence à la machine virtuelle HotSpot d'Oracle. Voici une brève introduction à la famille de machines virtuelles Java. Depuis la machine virtuelle Sun Classic incluse dans le JDK 1.0 publiée par Sun en 1996 jusqu'à aujourd'hui, de nombreux types de machines virtuelles sont apparus et ont disparu. Nous ne présentons ici que brièvement les machines virtuelles Java relativement courantes. machines qui sont actuellement en vie.

HotSpot VM

Les machines virtuelles fournies avec Oracle JDK et OpenJDK sont les machines virtuelles Java les plus courantes et les plus utilisées. Les articles techniques qui présentent la machine virtuelle Java, sauf indication contraire, la plupart d'entre eux présentent HotSpot VM
. HotSpot VM n'a pas été développé par Sun, mais a été conçu par Longview Technologies, une petite entreprise. Elle a été acquise par Sun en 1997, et Sun a été rachetée par Oracle en 2009. J9 VM
J9 VM est une VM développée par IBM et est actuellement sa principale machine virtuelle Java de développement. Le positionnement sur le marché de J9 VM est proche de celui de HotSpot VM. Il s'agit d'une machine virtuelle polyvalente conçue en tenant compte du serveur aux applications de bureau en passant par l'embarqué. Le niveau de performances actuel de J9 VM est à peu près au même niveau que celui de HotSpot VM.
Zing VM
Basé sur la VM HotSpot d'Oracle, il améliore de nombreux détails qui affectent la latence. Les trois principaux arguments de vente sont :

    1. Faible latence, "pas de pause" C4 GC, la pause provoquée par GC peut être contrôlée en dessous de 10 ms et la taille du tas Java pris en charge peut atteindre. 1 To ;
  • 2. Fonction de préchauffage rapide après le démarrage.
  • 3. Gérabilité : Zing Vision, un outil de surveillance intégré à la JVM qui n'a aucune surcharge et peut être activé à tout moment dans l'environnement de production.
3. Processus d'exécution de la machine virtuelle Java

Lorsque nous exécutons un programme Java, quel est son processus d'exécution ? Comme indiqué ci-dessous.

Comme vous pouvez le voir sur l'image ci-dessus,

la machine virtuelle Java n'a pas de connexion nécessaire avec le langage Java. Elle est uniquement liée à un fichier binaire spécifique : le fichier Classe

.

4. Structure de la machine virtuelle Java

L'architecture mentionnée ici fait référence au comportement abstrait de la machine virtuelle Java, plutôt qu'à l'implémentation spécifique de HotSpot VM. Selon la spécification de la machine virtuelle Java, la machine virtuelle Java abstraite se présente comme indiqué dans la figure ci-dessous.

JVM = chargeur de classe chargeur de classe + moteur d'exécution moteur d'exécution + zone de données d'exécution

. classloader charge le fichier de classe sur le disque dur dans la zone de données d'exécution de la JVM, mais il n'est pas responsable de savoir si le fichier de classe peut être exécuté, ce qui relève de la responsabilité du moteur d'exécution .

La spécification abstraite de la machine virtuelle Java n'est qu'un concept. De manière générale, la machine virtuelle Java est une implémentation spécifique de la spécification. Cette implémentation peut provenir de plusieurs fournisseurs et exister sur plusieurs plates-formes. Il peut être implémenté entièrement sous forme logicielle ou dans une combinaison de matériel et de logiciels.

5. Cycle de vie de la machine virtuelle

La tâche impérative d'une instance de machine virtuelle Java d'exécution est la suivante : responsable de l'exécution d'un programme Java.

Lorsqu'un programme Java est démarré, une instance de machine virtuelle naît. Lorsque le programme est fermé et quitté, l'instance de machine virtuelle mourra

. Si trois programmes Java sont exécutés simultanément sur le même ordinateur, trois instances de machine virtuelle Java seront obtenues. Chaque programme Java s'exécute dans sa propre instance de machine virtuelle Java. Une instance de machine virtuelle Java exécute un programme Java en appelant la méthode main() d'une classe initiale. La méthode main() doit être publique, statique, renvoyer void et accepter un tableau de chaînes comme paramètre. Toute classe avec une telle méthode main() peut être utilisée comme point de départ pour exécuter un programme Java.

Dans l'exemple ci-dessus, la méthode main() de la classe initiale du programme Java sera utilisée comme point de départ du thread initial du programme, et tous les autres threads sont démarrés par ce thread initial.

Il existe deux types de threads à l'intérieur de la machine virtuelle Java : les threads démons et les threads non démons . Les threads démons sont généralement utilisés par la machine virtuelle elle-même, tels que les threads qui effectuent des tâches de garbage collection . Cependant, un programme Java peut également marquer n'importe quel thread qu'il crée comme thread démon. Le thread initial du programme Java, celui qui démarre dans main(), est un thread non-démon.

Tant qu'un thread non-démon est en cours d'exécution, le programme Java continuera à s'exécuter. Lorsque tous les threads non démons du programme se terminent, l'instance de machine virtuelle se ferme automatiquement . Si le responsable de la sécurité le permet, le programme lui-même peut également se terminer en appelant la méthode exit() de la classe Runtime ou de la classe System.

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
Article précédent:Comment utiliser JavaPoet ?Article suivant:Comment utiliser JavaPoet ?