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ächlichDirektzeiger
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 TypdatenDas 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) fest,
parst und initialisiert.
Nach der Klassenprüfung weist die virtuelle Maschine Speicher für das neue Objekt zu.
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?
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
die Instanzmitglieder und Instanzinitialisierungsblöcke der Unterklasse in der Reihenfolge aus, in der sie im Code erscheinen . Die
Unterklassenkonstruktionsmethoden
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!