Maison >Java >javaDidacticiel >java--explication détaillée du processus de chargement de classe

java--explication détaillée du processus de chargement de classe

php是最好的语言
php是最好的语言original
2018-08-10 13:57:482218parcourir

1. Chargement

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 dans la mémoire comme entrée d'accès à diverses données de cette classe dans la zone méthode.

2. Vérification

1. Vérification du format de fichier

Vérifiez si le flux d'octets est conforme à la spécification du format de fichier de classe et peut être utilisé par le version actuelle du traitement de la machine virtuelle.

2. Vérification des métadonnées

Effectuer une analyse sémantique sur les informations des secondes du bytecode pour garantir que les informations décrites par celui-ci sont conformes à la spécification du langage Java exigences.

3. Vérification du bytecode

Grâce à l'analyse du flux de données et du flux de contrôle, détermine que la sémantique du programme est légale et logique . Après le deuxième cycle de vérification des types de données dans les informations de métadonnées, les méthodes de classe seront vérifiées et analysées à ce stade pour garantir que les méthodes de la classe vérifiée ne provoqueront aucun événement mettant en danger la sécurité de la machine virtuelle pendant l'exécution. .

4. Vérification de la référence du symbole

Effectuer une vérification de correspondance sur des informations autres que la classe elle-même (diverses références de symboles dans le pool constant) pour garantir l'action d'analyse Cela peut être exécuté normalement. Si la vérification de la référence du symbole ne peut pas être réussie, une exception sera levée.

3. Préparation

C'est l'étape pour allouer formellement de la mémoire aux variables de classe et définir la valeur initiale des variables de classe. La mémoire utilisée par ces variables sera allouée dans la zone de méthode.

À l'heure actuelle, l'allocation de mémoire inclut uniquement les variables de classe (variables modifiées par statique), et non les variables d'instance qui seront allouées au tas Java avec l'objet lorsque l'objet est instancié et l'initialisation d'un. La variable de classe n'attribue pas la variable de classe à la valeur d'initialisation finale, mais l'affecte uniquement à la valeur zéro du type de données.

Par exemple, public static int value=123 ; dans la phase de préparation, la valeur se voit uniquement attribuer la valeur zéro de int, qui est 0, et non 123 (123 sera attribué une fois le programme compilé)

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.

La référence de symbole peut être n'importe quelle forme de littéral, qui peut être différente selon les différentes machines virtuelles, mais elles peuvent toutes localiser la cible et sont définies dans le fichier de classe.

Une référence directe est un pointeur qui peut pointer directement vers la cible, un décalage relatif ou une poignée qui peut localiser indirectement la cible.

5. Initialisation

Lors de la phase d'initialisation, l'exécution du code du programme Java défini commence. Dans cette phase, le programmeur initialise les variables de classe et autres ressources à travers un plan subjectif élaboré par le programme.

La véritable affectation est effectuée à ce stade , qui est la valeur publique static int = 123 dans la phase de préparation ; A ce stade, la valeur sera désormais attribuée à 123

Connexe Recommandé :

Explication graphique détaillée du processus de chargement d'une classe par JVM

Analyse de l'ordre de chargement des classes en Java (couramment utilisé dans questions d'entretien)

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