Heim  >  Artikel  >  Java  >  Erweiterte JVM-Funktionen-2. JVM-Zuweisung, Layout und Zugriffsprozess von Objekten im Heap

Erweiterte JVM-Funktionen-2. JVM-Zuweisung, Layout und Zugriffsprozess von Objekten im Heap

巴扎黑
巴扎黑Original
2017-06-26 11:31:441729Durchsuche

Nachdem wir zuvor den JVM-Laufzeitdatenbereich vorgestellt haben, erklären wir weitere Details der Daten im Speicher, um zu sehen, wie sie erstellt, angeordnet und abgerufen werden

1. Objekterstellung

 1. Zuweisung von Objekten

Es gibt zwei Hauptmethoden zum Erstellen und Zuweisen von Objekten. Typen: Zeigerkollision und freie Liste

 Zeigerkollision:

Unter der Annahme, dass der Heapspeicher absolut regelmäßig ist Wenn Sie Speicherplatz für ein neues Objekt zuweisen, müssen Sie nur den Zeiger in Richtung des freien Speicherplatzes des neuen Objekts bewegen

 , um einen Abschnitt mit der erforderlichen Größe zu erhalten.

Im Allgemeinen gilt bei Verwendung eines Kollektors mit einem kompakten (komprimierenden) Prozess eine Zeigerkollision

Freie Liste:

Wenn der Speicher nicht regelmäßig ist, müssen Sie eine Liste führen, um aufzuzeichnen, welcher Speicher frei ist. Suchen Sie bei der Zuweisung von Speicherplatz einen Teil von

aus der Liste und teilen Sie ihn in einen ausreichend großen Speicher auf Platz. Objektinstanzen und Aktualisierungslistendatensätze

Wenn Sie einen Kollektor verwenden, der auf dem Mark-Sweep-Algorithmus basiert, verwenden Sie freie Liste

 2. Initialisierung und Einstellung von Objekten

 Initialisierung: Nachdem die Speicherzuweisung abgeschlossen ist, wird das Objekt initialisiert und die Die virtuelle Maschine initialisiert den Speicherplatz und alle Werte werden auf 0 initialisiert. Einige notwendige Einstellungen dienen hauptsächlich zum Speichern die Metadateninformationen der Klasse, der Hashwert des Objekts , das Generationsalter usw. im Objektheader.

  

init

: Nach den beiden oben genannten Schritten wird das Objekt erstellt, aber alle Felder sind immer noch 0. Der letzte Schritt besteht darin, die Init-Methode auszuführen und das Objekt entsprechend der Absicht des Programmierers zu initialisieren Nach Abschluss der oben genannten drei Schritte wird ein Objekt erstellt.

2. Speicherlayout von Objekten

Das Layout von im Speicher gespeicherten Objekten ist hauptsächlich in drei Teile unterteilt. Objekt-Header, Instanzdaten, Ausrichtungsauffüllung  Objekt-Header

Der Objekt-Header wird in der Objekteinstellungsphase erwähnt, das heißt, einige Daten werden im gespeichert Objekt-Header während der Einstellungsphase. Informationen zu Klassenmetadaten, Hash-Wert, Generationsalter usw.

Das Objekt ist hauptsächlich in zwei Teile unterteilt: Laufzeitdaten und Typzeiger 

Laufzeitdaten

: Es speichert hauptsächlich den Hash-Code, die Generierungsinformationen, die Identifizierung des Sperrstatus, die von Threads gehaltenen Sperren usw., die in der obigen Objekteinstellungsphase gespeichert sind.

   

Typzeiger

: Ein Zeiger, der hauptsächlich die Klassenmetadaten des Objekts speichert, d. h., von welcher Klasse das Objekt eine Instanz ist. Wenn der Objekttyp außerdem ein Array ist,  Objektkopf Es werden auch Daten gespeichert, die die Datenlänge darstellen

Ausrichtungsauffüllung

: In Hotspot ist die Startadresse nicht unbedingt vorhanden Das Objekt muss ein Vielfaches von 8 Bytes sein. Wenn der Objektinstanzteil nicht ausgerichtet ist, verwenden Sie Ausrichtungsauffüllung, um ihn zu vervollständigen.

 

3. Greifen Sie auf die Positionierung von Objekten zu

 Java-Programme bedienen Objektinstanzen über Referenzdaten auf dem Stapel, es handelt sich also nur um eine Referenz Die spezifische Positionierungsmethode jvm hat unterschiedliche Implementierungen

Es gibt zwei gängige Implementierungsmethoden: Verwendung von Handles und direkten Zeigern Prinzip: Ein Bereich wird im Java-Heap als Handle-Pool reserviert . Die Referenz speichert die Handle-Adresse

, die den Zeiger der Objektinstanzdaten und den Objekttypzeiger enthält

Vorteile: Wenn das Objekt verschoben wird, ändern Sie es einfach die im Handle-Pool gespeicherte Adresse

Gespeichert wird die Adresse des Objekts

Vorteile: Es spart Zeit bei der Positionierung und ist effizienter

Hotspot verwendet die Direktzeigermethode

   

    

    

    

  

Das obige ist der detaillierte Inhalt vonErweiterte JVM-Funktionen-2. JVM-Zuweisung, Layout und Zugriffsprozess von Objekten im Heap. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn