Maison Java javaDidacticiel Introduction détaillée à JAVA Virtual Machine (JVM) (5) - Mécanisme de chargement de classe

Introduction détaillée à JAVA Virtual Machine (JVM) (5) - Mécanisme de chargement de classe

Aug 24, 2019 pm 03:14 PM
jvm

Dans l'article précédent, nous avons expliqué les fichiers de classe. Dans cet article, nous parlerons de la façon dont la machine virtuelle charge ces fichiers de classe ? Qu'arrive-t-il aux informations contenues dans le fichier Class une fois qu'elles entrent dans la machine virtuelle ? Cela implique le mécanisme de chargement de classe.

Le mécanisme de chargement de classe consiste à charger les données de classe du fichier de classe dans la mémoire, à vérifier les données, à les convertir, à les analyser et à les initialiser, et enfin à former un type Java qui peut être directement utilisé par la machine virtuelle. . Cette série de processus est complétée pendant l'exécution du programme.

Chargeur de classe

Le chargeur de classe est la partie dans la case rouge dans la figure ci-dessous. Il obtient les octets binaires décrivant cette classe via le nom complet d'un. class Stream, chargeant ainsi dynamiquement les classes Java dans l'espace mémoire de la JVM.

Introduction détaillée à JAVA Virtual Machine (JVM) (5) - Mécanisme de chargement de classe

Scénarios applicables

Pour la phase de chargement d'une classe non-tableau, vous peut utiliser le système. Cela peut être fait par le chargeur de classe de démarrage fourni, ou cela peut être fait par un chargeur de classe défini par l'utilisateur.
Pour les classes array, elles sont créées directement par la machine virtuelle Java sans passer par le chargeur de classe.

Mécanisme de délégation parentale

Le mécanisme de délégation parentale est une méthode utilisée par le chargement de classe. Si un chargeur de classe reçoit une demande de chargement de classe, il n'essaiera pas de charger la classe lui-même en premier, mais déléguera la demande au chargeur de classe parent pour qu'il la termine. Cela est vrai pour tous les niveaux de chargeur de classe. Ce n'est que lorsque le chargeur parent signale qu'il ne peut pas terminer la requête que le chargeur enfant essaiera de la charger lui-même.

Introduction détaillée à JAVA Virtual Machine (JVM) (5) - Mécanisme de chargement de classe

Analogie avec la réalité : Xiao Ming veut acheter une pelle jouet, mais il est trop gêné pour le dire directement. Ainsi, la conversation suivante a eu lieu.

Xiao Ming a demandé à son père : Papa, tu as une excavatrice ?
Papa a dit : Non
Puis papa a demandé à grand-père : Papa, papa, tu as une excavatrice ?
Grand-père a dit : Non
Puis grand-père a demandé à l'arrière-grand-père : Papa, papa, tu as une excavatrice ?
Grand-père a dit : Moi non plus. Laissez votre arrière-petit-fils en acheter un.
En conséquence, Xiao Ming a acheté lui-même avec plaisir une pelle jouet.

Catégorie

Le chargeur de classe de démarrage est implémenté en C++ et fait partie de la machine virtuelle elle-même.
D'autres chargeurs de classes sont implémentés dans le langage Java, indépendants de la machine virtuelle, et héritent tous de la classe abstraite java.lang.ClassLoader.

Avantages

Prenons la classe String comme exemple. Même si l'utilisateur écrit lui-même une implémentation de la classe String, lors du chargement de cette classe, il sera uniquement délégué au chargeur de classe de démarrage de charger la classe String d'origine dans le JDK, et la classe String personnalisée ne sera jamais chargée. Cela garantit la sécurité du système.

Quand le chargement des classes est-il effectué ?

Il existe et seulement les 5 façons suivantes pour charger une classe immédiatement

(1) Lors de l'utilisation de new pour instancier un objet ; lire ou configurer les champs statiques d'une classe (modifiés par final, déjà en cours de compilation) ) (sauf lorsque le résultat est placé dans le champ statique du pool de constantes) ;

(2) Lors de l'utilisation de la méthode du package java.lang.reflect pour effectuer un appel réfléchi à la classe. Si la classe n'a pas été initialisée, son initialisation doit être déclenchée en premier.

(3) Lors de l'initialisation d'une classe, s'il s'avère que sa classe parent n'a pas été initialisée, vous devez d'abord déclencher l'initialisation de sa classe parent.

(4) Lorsque la machine virtuelle démarre, l'utilisateur doit spécifier une classe principale à exécuter (la classe contenant la méthode main()), et la machine virtuelle initialisera d'abord la classe principale

Détails du processus de chargement des classes

Le processus de chargement des classes est divisé en 5 étapes. La plupart d'entre eux sont dominés et contrôlés par la machine virtuelle, à l'exception des deux situations suivantes :

Dans la phase de chargement

Les développeurs peuvent participer via un chargeur de classe personnalisé

Dans La phase d'initialisation

exécutera le code du développeur pour initialiser les variables de classe et d'autres ressources

Chargement

Choses que la machine virtuelle doit accomplir :

(1) Obtenez le flux d'octets binaires qui définit cette classe via le nom complet d'une classe.
(2) Convertissez la structure de stockage statique représentée par ce flux d'octets en une structure de données d'exécution dans la zone de méthode.
(3) Générez un objet java.lang.Class représentant cette classe en mémoire comme entrée d'accès à diverses données de cette classe dans la zone de méthode.

Introduction détaillée à JAVA Virtual Machine (JVM) (5) - Mécanisme de chargement de classe

2. Vérification

Le but de la vérification est de garantir que le Fichier de classe Les informations contenues dans le flux d'octets répondent aux exigences de la machine virtuelle actuelle et ne mettront pas en danger la sécurité de la machine virtuelle elle-même.

Il est divisé en 4 étapes : vérification du format de fichier, vérification des métadonnées, vérification du bytecode et vérification de la référence du symbole. Parmi eux, la vérification du format de fichier opère directement sur le flux d'octets et les trois éléments restants sont effectués dans la zone méthode.

3. Préparation

Cette étape est l'étape permettant d'allouer formellement de la mémoire aux variables de classe et de définir la valeur initiale des variables de classe. Il est attribué dans la zone méthode. Il y a deux points à noter :

(1) À l'heure actuelle, seules les variables de classe (variables modifiées par statique) se voient allouer de la mémoire, pas les variables d'objet. La mémoire est allouée à un objet lorsque l'objet est instancié et est allouée au tas Java avec l'objet.

(2) Si une variable de classe n'est pas modifiée par final, sa valeur initiale est la valeur zéro du type de données. Par exemple, le type int est 0 et le type booléen est false. Un exemple pour illustrer : la valeur initiale de

public static int value=123;
Copier après la connexion

après la phase de préparation est 0 au lieu de 123, car aucune méthode java n'a été exécutée à ce moment, et l'instruction putstatic qui attribue la valeur à 123 est après le programme est compilé. , stocké dans la méthode constructeur de classe < clinit >(). Par conséquent, l'action d'attribuer une valeur à 123 ne sera exécutée que pendant la phase d'initialisation.


public static final int value=123;
Copier après la connexion

Parce qu'il y a final à ce moment, la valeur a été attribuée à 123 dans la phase de préparation.

4. Analyse

La phase d'analyse est le processus dans lequel la machine virtuelle remplace les références de symboles dans le pool constant par des références directes. références. Les classes ou interfaces, les champs, les méthodes de classe, les méthodes d'interface, etc. peuvent être analysés.

Qu'est-ce qu'une référence symbolique :

Une référence symbolique est une chaîne contenant des informations sur la classe, le nom de la méthode, les paramètres de la méthode et d'autres informations. Elle est utilisée dans la table des méthodes de la classe. pour une utilisation réelle. Trouvez la méthode correspondante.

Qu'est-ce qu'une référence directe :

Une référence directe est un offset, que l'on retrouve directement dans la zone mémoire du classe La position de départ du bytecode de la méthode.
La référence du symbole vous indique certaines caractéristiques de cette méthode. Vous devez utiliser ces caractéristiques pour trouver la méthode correspondante. La citation directe signifie vous indiquer directement où se trouve cette méthode.

5. Initialisation

Cette étape est utilisée pour initialiser les variables de classe et d'autres ressources, et est le constructeur de classe d'exécution

Ce qui précède est une explication détaillée du mécanisme de chargement des classes de machines virtuelles JAVA. Pour plus de questions connexes, veuillez visiter le site Web PHP chinois : Tutoriel vidéo JAVA

.

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

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)

Un outil de supervision JVM distribué, très pratique ! Un outil de supervision JVM distribué, très pratique ! Aug 15, 2023 pm 05:15 PM

Ce projet est conçu pour permettre aux développeurs de surveiller plus rapidement plusieurs JVM hôtes distants. Si votre projet est Spring Boot, il est très facile à intégrer. S'il ne s'agit pas de Spring Boot, ne vous découragez pas. initialiser rapidement un programme de démarrage Spring et le présenter vous-même suffit.

Explication détaillée des paramètres de ligne de commande JVM : l'arme secrète pour contrôler le fonctionnement de la JVM Explication détaillée des paramètres de ligne de commande JVM : l'arme secrète pour contrôler le fonctionnement de la JVM May 09, 2024 pm 01:33 PM

Les paramètres de ligne de commande JVM vous permettent d'ajuster le comportement de la JVM à un niveau plus fin. Les paramètres communs incluent : Définir la taille du tas Java (-Xms, -Xmx) Définir la taille de la nouvelle génération (-Xmn) Activer le garbage collector parallèle (-XX:+UseParallelGC) Réduire l'utilisation de la mémoire de la zone Survivor (-XX : -ReduceSurvivorSetInMemory) Éliminer la redondance Éliminer le garbage collection (-XX:-EliminateRedundantGCs) Imprimer les informations sur le garbage collection (-XX:+PrintGC) Utiliser le garbage collector G1 (-XX:-UseG1GC) Définir le temps de pause maximum du garbage collection (-XX:MaxGCPau

Points clés et précautions relatifs à la gestion de la mémoire JVM Points clés et précautions relatifs à la gestion de la mémoire JVM Feb 20, 2024 am 10:26 AM

Points clés et précautions pour maîtriser l'utilisation de la mémoire de la JVM La JVM (JavaVirtualMachine) est l'environnement dans lequel s'exécutent les applications Java, et le plus important est la gestion de la mémoire de la JVM. Une gestion correcte de la mémoire JVM peut non seulement améliorer les performances des applications, mais également éviter des problèmes tels que des fuites et des débordements de mémoire. Cet article présentera les points et considérations clés de l'utilisation de la mémoire JVM et fournira quelques exemples de code spécifiques. Partitions de mémoire JVM La mémoire JVM est principalement divisée dans les zones suivantes : Heap (Heap)

Analyse des fonctions et principes de la machine virtuelle JVM Analyse des fonctions et principes de la machine virtuelle JVM Feb 22, 2024 pm 01:54 PM

Une introduction à l'analyse des fonctions et des principes de la machine virtuelle JVM : La machine virtuelle JVM (JavaVirtualMachine) est l'un des composants centraux du langage de programmation Java, et c'est l'un des principaux arguments de vente de Java. Le rôle de la JVM est de compiler le code source Java en bytecodes et d'être responsable de l'exécution de ces bytecodes. Cet article présentera le rôle de la JVM et son fonctionnement, et fournira quelques exemples de code pour aider les lecteurs à mieux comprendre. Fonction : La fonction principale de JVM est de résoudre le problème de portabilité des programmes Java sur différentes plateformes.

Erreur Java : erreur de dépassement de mémoire JVM, comment gérer et éviter Erreur Java : erreur de dépassement de mémoire JVM, comment gérer et éviter Jun 24, 2023 pm 02:19 PM

Java est un langage de programmation populaire lors du développement d'applications Java, vous pouvez rencontrer des erreurs de dépassement de mémoire JVM. Cette erreur provoque généralement le crash de l'application, affectant l'expérience utilisateur. Cet article explorera les causes des erreurs de dépassement de mémoire JVM et comment gérer et éviter de telles erreurs. Qu’est-ce qu’une erreur de débordement de mémoire JVM ? La machine virtuelle Java (JVM) est l'environnement d'exécution des applications Java. Dans la JVM, la mémoire est divisée en plusieurs zones, notamment le tas, la zone de méthode, la pile, etc. Le tas est utilisé pour stocker les objets créés

Programme Java pour vérifier si la JVM est 32 bits ou 64 bits Programme Java pour vérifier si la JVM est 32 bits ou 64 bits Sep 05, 2023 pm 06:37 PM

Avant d'écrire un programme Java pour vérifier si la JVM est 32 bits ou 64 bits, parlons d'abord de la JVM. JVM est une machine virtuelle Java, responsable de l'exécution du bytecode. Il fait partie de Java Runtime Environment (JRE). Nous savons tous que Java est indépendant de la plate-forme, mais JVM dépend de la plate-forme. Nous avons besoin d'une JVM distincte pour chaque système d'exploitation. Si nous avons le bytecode de n’importe quel code source Java, nous pouvons facilement l’exécuter sur n’importe quelle plate-forme grâce à JVM. L'ensemble du processus d'exécution du fichier Java est le suivant - Tout d'abord, nous enregistrons le code source Java avec l'extension .java et le compilateur le convertit en bytecode avec l'extension .class. Cela se produit au moment de la compilation. Maintenant, au moment de l'exécution, J

Comment ajuster efficacement la taille de la mémoire tas JVM ? Comment ajuster efficacement la taille de la mémoire tas JVM ? Feb 18, 2024 pm 01:39 PM

Paramètres de mémoire JVM : comment ajuster raisonnablement la taille de la mémoire tas ? Dans les applications Java, la JVM est le composant clé responsable de la gestion de la mémoire. Parmi eux, la mémoire tas est utilisée pour stocker les instances d'objets. Le paramètre de taille de la mémoire tas a un impact important sur les performances et la stabilité de l'application. Cet article explique comment ajuster raisonnablement la taille de la mémoire du tas, avec des exemples de code spécifiques. Tout d’abord, nous devons comprendre quelques connaissances de base sur la mémoire JVM. La mémoire de la JVM est divisée en plusieurs zones, notamment la mémoire tas, la mémoire pile, la zone méthode, etc. dans

Démystifier le principe de fonctionnement de la JVM : exploration approfondie des principes de la machine virtuelle Java Démystifier le principe de fonctionnement de la JVM : exploration approfondie des principes de la machine virtuelle Java Feb 18, 2024 pm 12:28 PM

Explication détaillée des principes JVM : Une exploration approfondie du principe de fonctionnement de la machine virtuelle Java nécessite des exemples de code spécifiques 1. Introduction Avec le développement rapide et l'application généralisée du langage de programmation Java, la machine virtuelle Java (JavaVirtualMachine, appelée JVM ) est également devenu indispensable dans le développement de logiciels. En tant qu'environnement d'exécution des programmes Java, JVM peut fournir des fonctionnalités multiplateformes, permettant aux programmes Java de s'exécuter sur différents systèmes d'exploitation. Dans cet article, nous examinerons le fonctionnement de la JVM

See all articles