Maison  >  Article  >  Java  >  Qu'est-ce que la méthode de disposition de la mémoire de stockage d'objets Java

Qu'est-ce que la méthode de disposition de la mémoire de stockage d'objets Java

王林
王林avant
2023-05-10 18:34:061201parcourir

Disposition de la mémoire de stockage d'objets Java

Comme nous le savons tous, Java est un langage orienté objet, alors que contient un objet en mémoire Tout d'abord, La plupart des objets le sont ? Stocké sur le tas (sauf pour l'évasion ).

Ensuite, le stockage des objets dans le tas est principalement divisé en trois parties

  • En-tête d'objet, instance d'objet data , Supplément d'alignement (le tableau aura une longueur de tableau supplémentaire)

  • Object header:

    # 🎜🎜#

    marquer le mot : Stocke le hashCode de l'objet, les informations de verrouillage (mise à niveau du verrouillage) ou des informations telles que l'âge de la génération ou le drapeau GC

    Pointeur de type : # 🎜🎜# Stocke un pointeur vers la classe à laquelle appartient l'objet (fichier de classe dans métadonnées ), à travers lequel la JVM détermine à quelle classe appartient l'objet #🎜 🎜#

    #🎜 🎜#Données d'instance d'objet :
  • Les informations d'objet générées par new stockent les informations de données d'attribut de la classe, y compris les informations d'attribut de la classe parent ;

    Supplément d'alignement
  • L'objet tableau sera multi-aligné et rempli #🎜 🎜#La JVM exige que l'espace occupé par l'objet soit de 8. Les multiples facilitent l'allocation de mémoire (allocation en octets comme unité minimale), cette partie est donc utilisée pour remplir l'espace insuffisant pour constituer le nombre.

    Positionnement d'accès aux objets Java

Les principales méthodes d'accès courantes sont#🎜🎜 #handle

et

pointeurs directs
  • handle :

    #🎜🎜 #Un morceau de mémoire est divisé en tas Java en tant que pool de handles. La référence dans la pile stocke l'adresse du handle de l'objet, et le handle contient les informations d'adresse spécifiques des données d'instance d'objet et des données de type
  • .
  • # 🎜🎜#

    Pointeur direct

    La disposition de la mémoire des objets dans le tas Java doit prendre en compte la manière d'empêcher l'accès aux données de type liées informations. Le pointeur direct stocké dans la référence est l’adresse de l’objet.

  • L'accès direct du pointeur à l'objet ne nécessite pas de surcharge d'accès indirect supplémentaire, et le handle est pratique lorsque l'adresse de l'objet change (le garbage collection déplacera l'adresse de l'objet) et doit seulement être modifié dans le handle. La référence du pointeur elle-même n'a pas besoin d'être modifiée.

    Le processus de création d'objets Java

  • Lorsque la machine virtuelle rencontre la nouvelle instruction, elle vérifie d'abord la classe spécifiée Si

    est chargé, vérifié, préparé
  • (
alloue de l'espace mémoire pour toutes les variables statiques de la classe et définit une valeur initiale pour cela

) # 🎜🎜 #,
    analyse, initialisation
  • réussie.

    Après la vérification de classe, la machine virtuelle alloue de la mémoire pour les nouveaux objetsComment garantir la sécurité de l'allocation de mémoire du tas dans des situations simultanées# 🎜🎜# La machine virtuelle utilise CAS avec des tentatives d'échec pour garantir l'atomicité pour allouer de la mémoire aux threads, allouer de l'espace lors de la création des threads et laisser la tâche d'allouer de la mémoire aux threads. Ouvrez TLAB (Thread local Allocation Buffer)

  • Après avoir alloué la mémoire, définissez l'en-tête de l'objet, tel que l'instance de classe, le hashcode, le pointeur d'informations sur les métadonnées de classe (zone de méthode)

    Exécutez la méthode init (méthode du noyau), initialisez les variables membres, exécutez le bloc de code d'instanciation, appelez le constructeur de la classe et mettez le tas La première adresse de l'objet est affecté à la variable de référence.

  • Le thread d'allocation d'objet Java est-il sécurisé ?
  • Divisez l'allocation de mémoire en différents espaces en fonction des threads, c'est-à-dire que chaque thread pré-alloue un petit bloc de mémoire dans le tas Java, appelé local tampon d'allocation de thread TLAB, quel thread Pour allouer de la mémoire, allouez-la dans le TLAB correspondant La synchronisation sera effectuée une fois le TLAB épuisé.
  • Ordre d'instanciation de la classe Java

    Membres statiques de la classe parent et blocs d'initialisation statiques, appuyez sur le code Exécuter les membres statiques de la sous-classe et les blocs d'initialisation statiques dans l'ordre d'apparition
  • #
  • Les membres de l'instance de la classe Parent et les blocs d'initialisation de l'instance sont exécutés dans l'ordre dans lequel ils apparaissent. dans le code

Méthode de construction de la classe parent

#🎜🎜 #

    Les membres de l'instance de sous-classe et les blocs d'initialisation de l'instance sont exécutés dans le ordre dans lequel ils apparaissent dans le code

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer