Table des matières
Chargeur de classe
Chargement
Zone de données d'exécution
Le moteur d'exécution
Interface et bibliothèque de méthodes locales
Résumé
Maison Java javaDidacticiel Explication détaillée de l'architecture JVM avec images et textes

Explication détaillée de l'architecture JVM avec images et textes

Mar 12, 2017 am 09:59 AM

Cet article explique l'architecture JVM en détail avec des images et du texte

JVM est un ordinateur abstrait basé sur la pilearchitecture Il possède son propre jeu d'instructions et sa propre gestion de la mémoire, et est. une multiplateforme Java Sur cette base, la JVM interprète et exécute le bytecode, ou compile le bytecode en code local pour exécution. L'architecture de la machine virtuelle Java est la suivante :

Explication détaillée de larchitecture JVM avec images et textes

Class File

Class File est une plateforme- fichier binaire indépendant, contient du bytecode qui peut être exécuté par la JVM, dans lequel les multi-octets sont dans l'ordre big-endian et les caractères utilisent un codage UTF-8 amélioré. Le fichier Class décrit avec précision les informations d'une classe ou d'une interface, notamment :

Chargeur de classe

Chargeur de classe, JVM est dynamique lorsque la classe est utilisée pour la première fois le chargement, la liaison et l'initialisation. Le modèle de chargement par défaut de la JVM est un modèle de délégation parent. Il existe une hiérarchie de relations parent-enfant entre les chargeurs de classe et est implémenté en interne à l'aide de la composition. De plus, il existe d'autres méthodes de chargement, telles que le chargement de Servlet. Il essaie d'abord de se charger lui-même, puis délègue au chargeur supérieur s'il échoue l'isolation de classe entre les chargeurs OSGI ; , et il n'y a pas de distinction entre les niveaux supérieur et inférieur.

Chargement

Le chargement consiste à prendre la classe ou l'interface représentée par le fichier Class et à créer un objet java.lang.Class correspondant dans la zone de méthode JVM , comme Class.forName(), ClassLoader.loadClass() et la réflexion peuvent déclencher le chargement de la classe. Lorsqu'un chargement de classe est déclenché, le processus détaillé est le suivant :

  • Vérifier si la classe a été chargée

  • Déléguer la demande de chargement à la classe supérieure chargeant

  • Essayez de rechercher la classe et chargez-la

Lorsque ClassLoader ne trouve pas la classe dans le chemin de classe, il lancera ClassNotFoundException; Lorsque la classe A fait référence à la classe B, la classe A a été chargée avec succès, mais le fichier de classe n'est pas trouvé lors du chargement de B, une NoClassDefFoundError sera levée. JVM possède les chargeurs de classes suivants :

Liens

Initialisation

classe d'exécution La méthode d'initialisation, c'est-à-dire l'attribution de champs statiques et l'exécution de blocs statiques, est dans l'ordre de ses

définitions et s. Les champs statiques de la classe parent seront initialisés avant les champs statiques de la classe enfant. À ce stade, une classe ou une interface est chargée en mémoire et la JVM garantira que l'ensemble du processus est thread-safe
. Il convient de noter que l’ensemble du processus n’implique aucun objet instance.

Zone de données d'exécution

Le moteur d'exécution

lit, traduit et exécute le bytecode. La JVM est basée sur une architecture de pile. Cette pile est la pile d'opérandes, et les instructions de bytecode effectuent diverses opérations à travers elle. Il existe également des machines virtuelles basées sur des registres.

  • Interprète, traduction : L'interprétation du bytecode est plus rapide mais l'exécution est lente. L'inconvénient est que chaque appel de méthode doit être retraduit et interprété.

  • Compilateur JIT, compilation juste à temps : découvrez les méthodes de hotspot fréquemment appelées dans le programme, compilez le bytecode en code local et améliorez les performances.

  • Garbage Collector : recycle les objets non valides, détermine si l'objet est recyclable et peut utiliser différents algorithmes de garbage collection.

Interface et bibliothèque de méthodes locales

JNI, appelant des méthodes locales, bibliothèque c/c requise par le moteur d'exécution.

Résumé

Les implémentations JVM grand public incluent la JVM Hotspot d'Oracle, JRockit et la JVM d'IBM. En ce qui concerne le réglage de la JVM, il fait référence par défaut à Hotspot VM, ce qui montre sa popularité. De nos jours, il est un peu difficile de se lancer dans Java sans comprendre la JVM -v-.
Pour écrire du code de haute qualité, vous devez non seulement comprendre la JVM, mais également avoir des connaissances informatiques de base complètes telles que le réglage et le dépannage. En fait, quel que soit le langage que vous utilisez pour le développement, il s'agit d'un processus de construction. et améliorer votre propre système de connaissances informatiques.

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment obtenir élégamment des noms de variables de classe d'entité pour créer des conditions de requête de base de données? Comment obtenir élégamment des noms de variables de classe d'entité pour créer des conditions de requête de base de données? Apr 19, 2025 pm 11:42 PM

Lorsque vous utilisez MyBatis-Plus ou d'autres cadres ORM pour les opérations de base de données, il est souvent nécessaire de construire des conditions de requête en fonction du nom d'attribut de la classe d'entité. Si vous manuellement à chaque fois ...

Comment simplifier les problèmes de cartographie des champs dans l'amarrage du système à l'aide de mapstruct? Comment simplifier les problèmes de cartographie des champs dans l'amarrage du système à l'aide de mapstruct? Apr 19, 2025 pm 06:21 PM

Le traitement de la cartographie des champs dans l'amarrage du système rencontre souvent un problème difficile lors de l'exécution d'amarrage du système: comment cartographier efficacement les champs d'interface du système a ...

Quelle est la différence entre les fuites de mémoire dans les programmes Java sur les processeurs ARM et architecture x86? Quelle est la différence entre les fuites de mémoire dans les programmes Java sur les processeurs ARM et architecture x86? Apr 19, 2025 pm 11:18 PM

Analyse du phénomène de fuite de mémoire des programmes Java sur différents processeurs d'architecture. Cet article discutera d'un cas où un programme Java présente différents comportements de mémoire sur les processeurs ARM et architecture x86 ...

Comment Intellij Idea identifie-t-elle le numéro de port d'un projet de démarrage de printemps sans publier un journal? Comment Intellij Idea identifie-t-elle le numéro de port d'un projet de démarrage de printemps sans publier un journal? Apr 19, 2025 pm 11:45 PM

Commencez le printemps à l'aide de la version IntelliJideaultimate ...

Comment convertir les noms en nombres pour implémenter le tri au sein des groupes? Comment convertir les noms en nombres pour implémenter le tri au sein des groupes? Apr 19, 2025 pm 01:57 PM

Comment convertir les noms en nombres pour implémenter le tri au sein des groupes? Lors du tri des utilisateurs en groupes, il est souvent nécessaire de convertir le nom de l'utilisateur en numéros afin qu'il puisse être différent ...

Le logiciel de sécurité de l'entreprise entraîne-t-il l'exécution de l'application? Comment dépanner et le résoudre? Le logiciel de sécurité de l'entreprise entraîne-t-il l'exécution de l'application? Comment dépanner et le résoudre? Apr 19, 2025 pm 04:51 PM

Dépannage et solutions au logiciel de sécurité de l'entreprise qui fait que certaines applications ne fonctionnent pas correctement. De nombreuses entreprises déploieront des logiciels de sécurité afin d'assurer la sécurité des réseaux internes. ...

Comment convertir les noms en nombres pour implémenter le tri et maintenir la cohérence en groupes? Comment convertir les noms en nombres pour implémenter le tri et maintenir la cohérence en groupes? Apr 19, 2025 pm 11:30 PM

Solutions pour convertir les noms en nombres pour implémenter le tri dans de nombreux scénarios d'applications, les utilisateurs peuvent avoir besoin de trier en groupe, en particulier en un ...

Comment convertir en toute sécurité les objets Java en tableaux? Comment convertir en toute sécurité les objets Java en tableaux? Apr 19, 2025 pm 11:33 PM

Conversion des objets et des tableaux Java: Discussion approfondie des risques et des méthodes correctes de la conversion de type de distribution De nombreux débutants Java rencontreront la conversion d'un objet en un tableau ...

See all articles