


Explication graphique détaillée du processus de chargement d'une classe par JVM
Cet article présente principalement le processus de chargement d'une classe par JVM. Il a une très bonne valeur de référence, jetons-y un coup d'œil avec l'éditeur ci-dessous
Processus de chargement de classe
Le code source Java est compilé en bytecode de classe, JVM Load le fichier bytecode .Class qui décrit les données de classe dans la mémoire, et vérifie, convertit, analyse et initialise les données pour finalement former un type Java qui peut être directement utilisé par la machine virtuelle. Il s'agit du mécanisme de chargement de classe de la machine virtuelle. machine.
Une classe commence par son chargement dans la mémoire de la machine virtuelle jusqu'à ce qu'elle soit déchargée de la mémoire. Son cycle de vie comprend : Chargement, Vérification, Préparation, Résolution. Il y a sept étapes : Initialisation, Utilisation et Déchargement, parmi lesquels les trois parties de vérification, de préparation et d'analyse sont collectivement appelées liens.
L'ordre des cinq étapes de chargement (chargement), vérification, préparation, initialisation et déchargement est fixe Le processus de chargement de la classe doit démarrer dans cet ordre, et. l'étape d'analyse Pas nécessairement ; elle peut dans certains cas démarrer après l'initialisation, pour la fonctionnalité de liaison dynamique d'exécution (également appelée liaison dynamique ou liaison tardive, telle que le remplacement).
1. Chargement :
Pendant la phase de chargement, la machine virtuelle effectue principalement trois choses :
1. a Le nom complet d'une classe pour obtenir le flux d'octets binaires qui définit cette classe.
2. Convertissez la structure de stockage statique représentée par ce flux d'octets en structure de données d'exécution de la zone de méthode.
3. Générez un objet java.lang.Class représentant cette classe dans le tas Java comme entrée d'accès aux données de la zone de méthode
Par rapport aux autres étapes du processus de chargement de classe, l'étape de chargement (préparatoire parlant, l'action d'obtenir le flux d'octets binaires de la classe lors de l'étape de chargement) est l'étape la plus contrôlable pendant la période de développement, car l'étape de chargement Cela peut être fait à l'aide du chargeur de classe (ClassLoader) fourni par le système, ou cela peut être fait par un chargeur de classe défini par l'utilisateur. Les développeurs peuvent contrôler la méthode d'acquisition du flux d'octets en définissant leur propre chargeur de classe.
Une fois la phase de chargement terminée, le flux d'octets binaires en dehors de la machine virtuelle est stocké dans la zone de méthode selon le format requis par la machine virtuelle. Le format de stockage des données dans la zone de méthode est défini par la zone de méthode. Implémentation de la machine. La machine virtuelle La structure de données spécifique de cette zone n'est pas spécifiée. Ensuite, un objet de la classe java.lang.Class est instancié dans le tas Java. Cet objet sert d'interface externe au programme pour accéder à ces types de données dans la zone de méthode.
2. Vérification :
Le but de la phase de vérification est de s'assurer que les informations contenues dans le flux d'octets du fichier Class sont conformes aux spécifications JVM et seront ne causera aucun dommage à la JVM. Si la vérification échoue, une exception java.lang.VerifyError ou son exception de sous-classe sera levée. Le processus de vérification est divisé en quatre étapes
1. Vérification du format de fichier : Vérifiez si le fichier de flux d'octets est conforme à la spécification du format de fichier Class et peut être traité correctement par la machine virtuelle actuelle.
2. Vérification des métadonnées : Il s'agit d'une analyse sémantique des informations décrites par le bytecode pour s'assurer que les informations décrites sont conformes aux spécifications du langage Java.
3. Vérification du bytecode : elle analyse principalement le flux de données et le flux de contrôle pour garantir que les méthodes de la classe vérifiée n'endommageront pas l'environnement virtuel au moment de l'exécution. machine.
4. Vérification de la référence du symbole : la vérification de la référence du symbole se produit lorsque la machine virtuelle convertit la référence du symbole en une référence directe. Cette action de conversion se produira pendant la phase d'analyse. .
3. Préparation :
La phase de préparation alloue de la mémoire pour les variables et définit l'initialisation des variables de classe. A ce stade, seules les variables de la classe (variables statiques modifiées) sont allouées, pas les variables d'instance de la classe. Pour les variables qui ne sont plus définitives, la JVM les mettra à "valeur zéro" au lieu de la valeur de leur instruction d'affectation :
pirvate static int size = 12
Puis à ce stade; , La valeur de size est 0 et non 12. Les variables de classe modifiées par final se verront attribuer des valeurs réelles.
4. Analyse :
La phase d'analyse est le processus de remplacement des références de symboles dans le pool de constantes de la machine virtuelle par des références directes.
Référence de symbole : une référence symbolique est un ensemble de symboles pour décrire l'objet cible référencé. Le symbole peut être n'importe quelle forme de littéral, à condition que la cible puisse être localisée sans ambiguïté lorsqu'elle est utilisée. Les références symboliques n'ont rien à voir avec la disposition de la mémoire implémentée par la machine virtuelle et l'objet cible référencé ne doit pas nécessairement être chargé en mémoire.
Référence directe : une référence directe peut être un pointeur pointant directement vers l'objet cible, un décalage relatif ou une poignée qui peut localiser indirectement la cible. Les références directes sont liées à l'implémentation de la disposition de la mémoire de la machine virtuelle. Les références directes traduites à partir de la même référence de symbole sur différentes instances de machine virtuelle ne sont généralement pas les mêmes. S'il existe une référence directe, la cible de référence doit déjà exister dans la mémoire.
La spécification de la machine virtuelle ne précise pas l'heure précise à laquelle la phase d'analyse se produit. Elle ne nécessite que 13 opérations telles que anewarry, checkcast, getfield, instanceof, Ensureinterface, InvocationSpecial, InvoquerStatique, Invoquervirtual, multianewarray, new, putfield et putstatic. Avant les instructions de bytecode des références de symboles, les références de symboles qu'elles utilisent sont analysées en premier, de sorte que l'implémentation de la machine virtuelle jugera si nécessaire s'il faut analyser les références de symboles dans le pool constant lorsque la classe est chargée par le chargeur, ou attendre jusqu'à ce que une référence de symbole est sur le point d'être utilisée avant de la résoudre.
L'action d'analyse est principalement effectuée sur quatre types de références de symboles : classes ou interfaces, champs, méthodes de classe et méthodes d'interface. Correspond respectivement aux quatre types de constantes CONSTANT_Class_Info, CONSTANT_Fieldref_Info, CONSTANT_Methodef_Info et CONSTANT_InterfaceMethoder_Info dans le pool de constantes compilé.
1. Analyse de classe et d'interface
2. 🎜>3. Analyse de la méthode de classe
4. Analyse de la méthode d'interface
5. Initialisation :
La phase d'initialisation d'une classe est la dernière étape du processus de chargement de la classe. Dans la phase de préparation, la variable de classe a reçu la valeur initiale requise par le système, et dans la phase d'initialisation, il s'agit d'initialiser les variables de classe et d'autres ressources selon le plan subjectif réalisé par le programmeur à travers le programme, ou cela peut être exprimé sous un autre angle : la phase d'initialisation consiste à exécuter le constructeur de classe
6. Utilisation :Nouveau thread --- compteur de programme ---- exécution de la pile jvm (référence d'objet) ----- mémoire tas (référence directe) ---- méthode zone
7 .Désinstaller :Collecte des ordures GC
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)
![Erreur de chargement du plugin dans Illustrator [Corrigé]](https://img.php.cn/upload/article/000/465/014/170831522770626.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Lors du lancement d'Adobe Illustrator, un message d'erreur de chargement du plug-in apparaît-il ? Certains utilisateurs d'Illustrator ont rencontré cette erreur lors de l'ouverture de l'application. Le message est suivi d'une liste de plugins problématiques. Ce message d'erreur indique qu'il y a un problème avec le plug-in installé, mais il peut également être provoqué par d'autres raisons telles qu'un fichier DLL Visual C++ endommagé ou un fichier de préférences endommagé. Si vous rencontrez cette erreur, nous vous guiderons dans cet article pour résoudre le problème, alors continuez à lire ci-dessous. Erreur de chargement du plug-in dans Illustrator Si vous recevez un message d'erreur « Erreur de chargement du plug-in » lorsque vous essayez de lancer Adobe Illustrator, vous pouvez utiliser les éléments suivants : En tant qu'administrateur

Les sous-titres ne fonctionnent pas sur Stremio sur votre PC Windows ? Certains utilisateurs de Stremio ont signalé que les sous-titres n'étaient pas affichés dans les vidéos. De nombreux utilisateurs ont signalé avoir rencontré un message d'erreur indiquant « Erreur de chargement des sous-titres ». Voici le message d'erreur complet qui apparaît avec cette erreur : Une erreur s'est produite lors du chargement des sous-titres. Échec du chargement des sous-titres : Cela pourrait être un problème avec le plugin que vous utilisez ou avec votre réseau. Comme l’indique le message d’erreur, il se peut que ce soit votre connexion Internet qui soit à l’origine de l’erreur. Veuillez donc vérifier votre connexion réseau et vous assurer que votre Internet fonctionne correctement. En dehors de cela, il peut y avoir d'autres raisons derrière cette erreur, notamment un module complémentaire de sous-titres conflictuels, des sous-titres non pris en charge pour un contenu vidéo spécifique et une application Stremio obsolète. comme

Si vous rencontrez des problèmes de blocage lors de l'insertion de liens hypertexte dans Outlook, cela peut être dû à des connexions réseau instables, à d'anciennes versions d'Outlook, à des interférences provenant d'un logiciel antivirus ou à des conflits de compléments. Ces facteurs peuvent empêcher Outlook de gérer correctement les opérations de liens hypertexte. Corriger le blocage d'Outlook lors de l'insertion d'hyperliens Utilisez les correctifs suivants pour corriger le blocage d'Outlook lors de l'insertion d'hyperliens : Vérifiez les compléments installés Mettre à jour Outlook Désactivez temporairement votre logiciel antivirus, puis essayez de créer un nouveau profil utilisateur Réparer le programme des applications Office Désinstaller et réinstaller Office Commençons. 1] Vérifiez les compléments installés. Il se peut qu'un complément installé dans Outlook soit à l'origine du problème.

Les solutions au problème selon lequel CSS ne peut pas être chargé incluent la vérification du chemin du fichier, la vérification du contenu du fichier, la suppression du cache du navigateur, la vérification des paramètres du serveur, l'utilisation des outils de développement et la vérification de la connexion réseau. Introduction détaillée : 1. Vérifiez le chemin du fichier. Tout d'abord, assurez-vous que le chemin du fichier CSS est correct. Si le fichier CSS se trouve dans une autre partie ou sous-répertoire du site Web, vous devez fournir le chemin correct. Le fichier CSS se trouve dans le répertoire racine, le chemin doit être direct. ; 2. Vérifiez le contenu du fichier, le problème peut résider dans le fichier CSS lui-même.

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

Comment JavaScript obtient-il l'effet de défilement infini en se chargeant automatiquement lors du défilement vers le bas de la page ? L'effet de défilement infini est l'une des fonctionnalités courantes du développement Web moderne. Il peut charger automatiquement plus de contenu lors du défilement vers le bas de la page, permettant aux utilisateurs d'obtenir plus de données ou de ressources sans cliquer manuellement sur des boutons ou des liens. Dans cet article, nous explorerons comment utiliser JavaScript pour obtenir cette fonctionnalité et fournirons des exemples de code spécifiques. Pour obtenir l'effet de défilement infini du chargement automatique lors du défilement vers le bas de la page, il est principalement divisé comme suit :

Qu'est-ce que la programmation orientée objet ? La programmation orientée objet (POO) est un paradigme de programmation qui résume les entités du monde réel en classes et utilise des objets pour représenter ces entités. Les classes définissent les propriétés et le comportement des objets, et les objets instancient les classes. Le principal avantage de la POO est qu’elle rend le code plus facile à comprendre, à maintenir et à réutiliser. Concepts de base de la POO Les principaux concepts de la POO incluent les classes, les objets, les propriétés et les méthodes. Une classe est le modèle d'un objet, qui définit ses propriétés et son comportement. Un objet est une instance d’une classe et possède toutes les propriétés et comportements de la classe. Les propriétés sont les caractéristiques d'un objet pouvant stocker des données. Les méthodes sont des fonctions d'un objet qui peuvent opérer sur les données de l'objet. Avantages de la POO Les principaux avantages de la POO sont les suivants : Réutilisabilité : la POO peut rendre le code plus

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)
