Maison >Java >javaDidacticiel >Fonctionnalités avancées JVM-2. Processus d'allocation, de disposition et d'accès JVM aux objets dans le tas.
Après avoir présenté la zone de données d'exécution jvm plus tôt, expliquons d'autres détails des données en mémoire pour voir comment elles sont créées, disposées et accessibles
1. Création d'objets
1. Allocation d'objets
Il existe deux manières principales de créer et d'attribuer des types d'objets. : Collision de pointeurs et liste libre
Collision de pointeurs:
En supposant que la mémoire du tas est absolument régulière, alors , lors de l'allocation d'espace mémoire pour un nouvel objet, il vous suffit de déplacer le pointeur vers la direction de l'espace libre du nouvel objet
pour obtenir une section de la taille requise.
Généralement, lors de l'utilisation d'un collecteur avec un processus compact (compactage), collision de pointeur
Liste gratuite :
Si la mémoire n'est pas régulière, vous devez alors tenir une liste pour enregistrer quelle mémoire est libre. Lors de l'allocation de l'espace, trouvez un morceau de
dans la liste et divisez-le en un morceau suffisamment grand. espace. Instances d'objet et enregistrements de liste de mise à jour
Lorsque vous utilisez un collecteur basé sur l'algorithme de balayage de marque, utilisez liste gratuite
2. Initialisation et paramétrage des objets
Initialisation : Une fois l'allocation de mémoire terminée, l'objet est initialisé et le la machine virtuelle initialisera l'espace mémoire sont tous initialisés à 0 valeurs,
sur le champ d'instance de l'objet' Certains paramètres nécessaires sont principalement à stocker les informations de métadonnées de la classe, la valeur de hachage de l'objet , l'âge de la génération, etc. dans l'en-tête de l'objet.
init : Après les deux étapes ci-dessus, l'objet est créé, mais tous les champs sont toujours à 0. La dernière étape consiste à exécuter la méthode init et à initialiser l'objet selon l'intention du programmeur
Après avoir terminé les trois étapes ci-dessus, un objet est créé.
2. Disposition de la mémoire des objets
La disposition des objets stockés en mémoire est principalement divisée en trois parties. En-tête d'objet, données d'instance, remplissage d'alignement
En-tête d'objet:
L'en-tête d'objet est mentionné dans la phase de paramétrage de l'objet, c'est-à-dire que certaines données seront stockées dans le en-tête de l'objet pendant la phase de configuration. Informations sur les métadonnées de classe, valeur de hachage, âge de génération, etc. L'objet est principalement divisé en deux parties : les données d'exécution et le pointeur de type
Données d'exécution
: Il stocke principalement le code de hachage, les informations de génération, l'identification de l'état du verrouillage, les verrous détenus par les threads, etc. stockés dans l'étape de configuration de l'objet ci-dessus.
Pointeur de type : Un pointeur qui stocke principalement les métadonnées de classe de l'objet, c'est-à-dire la classe dont l'objet est une instance. De plus, si le type d'objet est un tableau,
En-tête de l'objet Une donnée représentant la longueur des données y sera également stockée
Remplissage d'alignement: Elle n'existe pas forcément dans Hotspot, l'adresse de départ du. l'objet doit être un multiple de 8 octets,
Lorsque la partie de l'instance d'objet n'est pas alignée, utilisez le remplissage d'alignement pour la compléter.
3. Accéder au positionnement des objets
Les programmes Java exploitent des instances d'objet via des données de référence sur la pile, ce n'est donc qu'une référence, le méthode de positionnement spécifique jvm a différentes implémentations Il existe deux méthodes d'implémentation courantes : utiliser des handles et des pointeurs directs
Principe : une zone sera réservée dans le tas Java en tant que pool de handles . La référence stocke l'adresse du handle, qui contient le pointeur des données d'instance d'objet et le pointeur de type d'objet
Avantages : Si l'objet est déplacé, il suffit de le modifier. l'adresse stockée dans le pool de poignées
Ce qui est stocké dans est l'adresse de l'objet Avantages : Cela permet de gagner du temps de positionnement et est plus efficaceHotspot utilise la méthode du pointeur direct
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!