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
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 :
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 JavaJVM = 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
. 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!