Heim  >  Artikel  >  Java  >  Was ist die Java-Objektspeicher-Speicherlayoutmethode?

Was ist die Java-Objektspeicher-Speicherlayoutmethode?

王林
王林nach vorne
2023-05-10 18:34:061190Durchsuche

Java-Objektspeicher-Speicherlayout

Wie wir alle wissen, ist Java eine objektorientierte Sprache. Was enthält ein Objekt also im Speicher? Erstens: Die meisten Objekte werden auf dem Heap gespeichert (außer Escapes ).

Dann werden die im Heap gespeicherten Objekte hauptsächlich in drei Teile unterteilt

  • Objektkopf, Objektinstanzdaten, Ausrichtungsergänzung (das Array hat eine weitere Array-Länge)

  • Objektkopf:

    Markierungswort: Speichert den Hash-Code des Objekts, Sperrinformationen (Sperr-Upgrade) oder Generationsalter oder GC-Flag und andere Informationen.

    Typzeiger: Speichert einen Zeiger auf die Klasse, zu der das Objekt gehört (Klassendatei in Metadaten ), JVM übergibt Dies bestimmt, zu welcher Klasse dieses Objekt gehört Alignment-Ergänzung Dieser Teil wird verwendet, um nicht genügend Platz für die Nummer zu füllen.

  • Java-Objektzugriffspositionierung

    Zu den gängigen Zugriffsmethoden gehören hauptsächlich
  • Handle
  • und

    Direktzeiger

    Handle:

    Ein Speicherblock ist in den Java-Heap unterteilt Griff Pool, Stapel Die Handle-Adresse des in der Referenz gespeicherten Objekts, und das Handle enthält die spezifischen Adressinformationen der Objektinstanzdaten und Typdaten

    Direkter Zeiger
  • :

    Das Speicherlayout von Objekten im Java-Heap Sie müssen überlegen, wie Sie verhindern können, dass beim Zugriff auf verwandte Informationen vom Typ Daten direkt die Objektadresse als Referenz gespeichert wird.

    Der direkte Zeigerzugriff auf das Objekt erfordert keinen zusätzlichen indirekten Zugriffsaufwand, und das Handle ist praktisch, wenn sich die Objektadresse ändert (die Garbage Collection verschiebt die Objektadresse), nur die Zeigerreferenz im Handle ist nicht erforderlich geändert werden.
  • Erstellungsprozess von Java-Objekten

    Wenn die virtuelle Maschine auf die neue Anweisung stößt, prüft sie zunächst, ob die angegebene Klasse geladen, überprüft und vorbereitet wurde
  • (
  • weist Speicherplatz für alle statischen Variablen in der Klasse zu , und es legt einen Anfangswert

    ) fest,

    parst und initialisiert

    .

  • Nach der Klassenprüfung weist die virtuelle Maschine Speicher für das neue Objekt zu.

  • So stellen Sie die Sicherheit der Heap-Speicherzuweisung in gleichzeitigen Situationen sicher den Thread und erstellen Sie den Thread. Weisen Sie gleichzeitig Speicherplatz zu und überlassen Sie die Aufgabe, dem Thread Speicher zuzuweisen. Öffnen Sie TLAB (Thread Local Allocation Buffer)

    Legen Sie nach dem Zuweisen des Speichers den Objektheader fest, z. B. welche Klasseninstanz, Hashcode, Metadateninformationszeiger der Klasse (Methodenbereich)
  • Init-Methode zur Ausführung (Kernel-Methode). ), Mitgliedsvariablen initialisieren, den Instanziierungscodeblock ausführen, die Konstruktormethode der Klasse aufrufen und der Referenzvariablen die erste Adresse des Objekts im Heap zuweisen. Ist die Java-Objektzuweisung threadsicher?

  • CAS fügt Fehlerwiederholungen hinzu, um die Aktualisierungsintegrität sicherzustellen.
  • Teilen Sie die Speicherzuweisung entsprechend den Threads in verschiedene Bereiche auf, dh jeder Thread weist vorab einen kleinen Speicherblock im Java-Heap zu, der als lokaler Thread-Zuweisungspuffer TLAB bezeichnet wird im entsprechenden TLAB zugewiesen, TLAB ⽤ Wenn Sie fertig sind, synchronisieren Sie erneut.

    Instanziierungsreihenfolge der Java-Klasse

  • Die statischen Mitglieder und statischen Initialisierungsblöcke der übergeordneten Klasse werden in der Reihenfolge ausgeführt, in der sie im Code erscheinen.

  • Die statischen Mitglieder und statischen Initialisierungsblöcke der Unterklasse werden in ausgeführt in der Reihenfolge, in der sie im Code erscheinen. Führen Sie die

Instanzmitglieder und Instanzinitialisierungsblöcke der übergeordneten Klasse der Reihe nach aus und führen Sie die Konstruktormethoden der übergeordneten Klasse

  • die Instanzmitglieder und Instanzinitialisierungsblöcke der Unterklasse in der Reihenfolge aus, in der sie im Code erscheinen . Die

  • Unterklassenkonstruktionsmethoden

werden in der Reihenfolge ihres Auftretens ausgeführt.

Das obige ist der detaillierte Inhalt vonWas ist die Java-Objektspeicher-Speicherlayoutmethode?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen