it-swarm.com.de

Java Heap-Terminologie: junge, alte und dauerhafte Generationen?

Ich versuche zu verstehen, was die Konzepte von jungalt und permanente Generationen sind in der Java Heap-Terminologie, und genauer gesagt die Wechselwirkungen zwischen den drei Generationen.

Meine Fragen sind:

  • Was ist die junge Generation?
  • Was ist die alte Generation?
  • Was ist die permanente Generation?
  • Wie interagieren/verhalten sich die drei Generationen zueinander?
300
knorv

Dies scheint ein weit verbreitetes Missverständnis zu sein. In Oracle's JVM ist die permanente Generation nicht Teil des Heaps. Es ist ein separater Bereich für Klassendefinitionen und zugehörige Daten. In Java 6 und früher wurden auch interne Zeichenfolgen in der permanenten Generierung gespeichert. In Java 7 werden interne Zeichenfolgen im Hauptobjektheap gespeichert.

Hier ist ein guter Beitrag zur permanenten Generation .

Ich mag die Beschreibungen, die für jeden Bereich im Oracle-Handbuch zu JConsole angegeben sind:

Für die HotSpot Java VM sind die Speicherpools für die serielle Garbage Collection die folgenden.

  • Eden Space (Heap): Der Pool, aus dem für die meisten Objekte zunächst Speicher zugewiesen wird.
  • Überlebensraum (Haufen): Der Pool mit Objekten, die die Müllsammlung des Eden-Raums überlebt haben.
  • Tenured Generation (Heap): Der Pool mit Objekten, die seit einiger Zeit im Überlebensraum existieren.
  • Permanente Generierung (Nicht-Heap): Der Pool, der alle reflektierenden Daten der virtuellen Maschine selbst enthält, z. B. Klassen- und Methodenobjekte. Mit Java VMs, die Class Data Sharing verwenden, wird diese Generation in Nur-Lese- und Schreib-Lese-Bereiche unterteilt.
  • Code-Cache (kein Heap): Der HotSpot Java VM) enthält auch einen Code-Cache mit Speicher, der zum Kompilieren und Speichern von nativem Code verwendet wird.

Java verwendet die Speicherbereinigung für Generationen. Dies bedeutet, dass wenn Sie ein Objekt foo haben (das eine Instanz einer Klasse ist), je mehr Garbage Collection-Ereignisse es überlebt (wenn es noch Referenzen darauf gibt), desto weiter wird es heraufgestuft. Es beginnt in der jungen Generation (die selbst in mehrere Räume unterteilt ist - Eden und Survivor) und würde schließlich in der festen Generation enden, wenn es lange genug überleben würde.

288
Joshua McKinnon

Der Haufen ist wie folgt in junge und alte Generationen unterteilt:

Young Generation : Es ist ein Ort, an dem für kurze Zeit gelebt und in zwei Räume unterteilt wurde:

  • Eden Space: Wenn ein Objekt unter Verwendung eines neuen Schlüsselwortspeichers erstellt wurde, der diesem Bereich zugewiesen wurde.
  • Survivor Space: Dies ist der Pool, der Objekte enthält, die nach der Java Garbage Collection aus dem Eden Space überlebt haben.

Alte Generation : Dieser Pool enthält im Wesentlichen festen und virtuellen (reservierten) Speicherplatz und enthält die Objekte, die nach der Garbage Collection von Young Generation überlebt haben.

  • Tenured Space: Dieser Speicherpool enthält Objekte, die nach mehrfacher Garbage Collection überlebt haben, dh Objekte, die nach der Garbage Collection aus dem Survivor Space überlebt haben.

Permanente Generierung: Dieser Speicherpool enthält, wie der Name schon sagt, permanente Klassenmetadaten und Deskriptorinformationen, sodass PermGen-Platz immer für Klassen und für Klassen reserviert ist, die an die Klassen gebunden sind, zum Beispiel für statische Mitglieder.

Java8 Update: PermGen wird durch Metaspace ersetzt, was sehr ähnlich ist.
Der Hauptunterschied besteht darin, dass Metaspace die Größe dynamisch ändert, d. H., Dass es zur Laufzeit erweitert werden kann.
Java-Metaspace-Speicherplatz: unbegrenzt (Standard)

Code-Cache (virtuell oder reserviert): Wenn Sie HotSpot Java VM) verwenden, umfasst dies den Code-Cache-Bereich der Speicher, der zum Kompilieren und Speichern von nativem Code verwendet wird.

enter image description here

mit freundlicher Genehmigung

177
Premraj

Was ist die junge Generation?

In der jungen Generation werden alle neuen Objekte zugeordnet und gealtert. Wenn sich die junge Generation füllt, entsteht eine kleine Müllsammlung. Eine junge Generation voller toter Gegenstände wird sehr schnell gesammelt. Einige überlebte Objekte sind gealtert und wandern schließlich zur alten Generation.

Was ist die alte Generation?

Die Alte Generation dient zum Speichern von langlebigen Objekten. In der Regel wird ein Schwellenwert für ein Objekt der jungen Generation festgelegt. Wenn dieses Alter erreicht ist, wird das Objekt zur alten Generation verschoben. Schließlich muss die alte Generation eingesammelt werden. Dieses Ereignis wird als große Speicherbereinigung bezeichnet.

Was ist die permanente Generation?

Die permanente Generierung enthält Metadaten, die von der JVM zur Beschreibung der in der Anwendung verwendeten Klassen und Methoden benötigt werden. Die permanente Generation wird von der JVM zur Laufzeit basierend auf von der Anwendung verwendeten Klassen aufgefüllt.

PermGen wurde seit der Version Java 8) durch Metaspace ersetzt.

PermSize & MaxPermSize Parameter werden jetzt ignoriert

Wie interagieren/verhalten sich die drei Generationen zueinander?

enter image description here

Tutorial-Artikel zu Bildquelle und Oracle Technetwork: http://www.Oracle.com/webfolder/technetwork/tutorials/obe/Java/gc01/index.html

" Der allgemeine Garbage Collection-Prozess " im obigen Artikel erläutert die Wechselwirkungen zwischen ihnen mit vielen Diagrammen.

Schauen Sie sich das Übersichtsdiagramm an:

enter image description here

39
Ravindra babu

Die virtuelle Maschine Java ist in drei Generationen unterteilt: eine junge Generation, eine alte Generation und eine permanente Generation. Die meisten Objekte werden zunächst in der jungen Generation vergeben. Die alte Generation enthält Objekte, die eine Reihe von Sammlungen der jungen Generation überlebt haben, sowie einige große Objekte, die direkt der alten Generation zugeordnet werden können. Die permanente Generation enthält Objekte, die die JVM für die Verwaltung durch den Garbage Collector als praktisch erachtet, z. B. Objekte, die Klassen und Methoden sowie die Klassen und Methoden selbst beschreiben.

15
Mark R

Der Speicher in SunHotSpot JVM ist in drei Generationen unterteilt: junge Generation, alte Generation und permanente Generation.

  • Junge Generation: Die neu erstellten Objekte werden der jungen Generation zugeordnet.
  • Alte Generation: Wenn das neue Objekt einen größeren Heap-Speicherplatz anfordert, wird dieser direkt der alten Generation zugewiesen. Auch Objekte, die einige GC-Zyklen überstanden haben, werden in das alte Gen befördert, d. H. Langlebige Objekte, die im alten Gen enthalten sind.
  • Permanente Generierung: Die permanente Generierung enthält Objekte, die die JVM für die Verwaltung durch den Garbage Collector als praktisch erachtet, z. B. Objekte, die Klassen und Methoden beschreiben, sowie die Klassen und Methoden selbst.

Zu Ihrer Information: Das permanente Gen wird nicht als Teil des Java Heap angesehen.

Wie interagieren/verhalten sich die drei Generationen zueinander? Objekte (mit Ausnahme der großen) werden zunächst der jungen Generation zugeordnet. Wenn ein Objekt nach x nein am Leben bleibt. von Speicherbereinigungszyklen wird es zum alten/dauerhaften Gen befördert. Daher können wir sagen, dass das junge Gen die kurzlebigen Objekte enthält, während das alte Gen die Objekte enthält, die ein langes Leben haben. Das permanente Gen interagiert nicht mit den beiden anderen Generationen.

0
KrityAg