Maison >Java >javaDidacticiel >Fonctionnalités avancées JVM-2. Processus d'allocation, de disposition et d'accès JVM aux objets dans le tas.

Fonctionnalités avancées JVM-2. Processus d'allocation, de disposition et d'accès JVM aux objets dans le tas.

巴扎黑
巴扎黑original
2017-06-26 11:31:441765parcourir

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 efficace

Hotspot 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!

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