Java Heap-Terminologie: jung, alt und dauerhafte Generationen?
-
22-09-2019 - |
Frage
Ich versuche Was die Konzepte von zu verstehen jungen , alt und Dauer Generationen sind in der Java-Heap-Terminologie und genauer 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 funktioniert die drei Generationen interact / beziehen sich auf einander?
Lösung
Dies scheint ein weit verbreitetes Missverständnis. In Oracle JVM ist die permanente Generation nicht Teil des Haufens. Es ist ein separater Raum für Klassendefinitionen und die zugehörigen Daten. In Java 6 und früher internierten Saiten wurden auch in der permanenten Generation gespeichert. In Java 7 werden internierten Strings im Haupt Objektheap gespeichert.
Hier ist ein guter Beitrag auf permanente Erzeugung .
ich wie die Beschreibungen für jeden Raum gegeben in Oracle Führung auf JConsole :
Für die HotSpot Java VM, der Speicher Pools für die serielle Garbage Collection die folgende.
sind
- Eden Raum (Heap): Der Pool aus dem Speicher ursprünglich zugewiesen Für die meisten Objekte.
- Survivor Raum (Heap): Der Pool mit Objekten, die überlebt haben die Speicherbereinigungs des Eden Raum.
- Tenured Generation (Heap): Der Pool mit Objekten, die bestanden haben seit einiger Zeit in den Überlebenden Raum.
- Permanent Generation (Nicht-Heap): Der Pool alle reflektierenden enthält Daten der virtuellen Maschine selbst, wie Klassen- und Methodenobjekte. Mit Java VMs, dass die Datenfreigabe Verwendung Klasse, Diese Generation ist unterteilt in Nur-Lese-und Schreib-Lese-Bereiche.
- Code-Cache (Nicht-Heap): Die HotSpot Java VM auch einen Code-Cache enthält, enthaltenden Speicher, der verwendet wird für Zusammenstellung und Speicherung von nativen Code.
Java verwendet Generations-Speicherbereinigungs. Dies bedeutet, dass wenn Sie ein Objekt foo (was eine Instanz einer Klasse ist), desto mehr Garbage Collection Ereignisse es (wenn es noch Verweise darauf) überlebt, je weiter sie gefördert wird. Es beginnt in der jungen Generation (die sich in mehrere Räume unterteilt - Eden und Survivor). Und würde schließlich in der fest angestellten Generation am Ende, wenn es lange genug überlebt
Andere Tipps
Der Heap ist in jungen und alten Generationen wie folgt:
Young Generation : Es ist Platz, wo für kurze Zeit und in zwei Räume unterteilt gelebt:
- Eden Raum : Wenn das Objekt mit neuem Keyword-Speicher erstellt zugewiesen in diesem Raum.
- Survivor Raum : Dies ist der Pool, die Objekte enthält, die haben nach Java Garbage Collection von Eden Raum erhalten.
alte Generation : Dieser Pool im Grunde enthält tenured und virtuelle (Reserviert) Raum und die Objekte werden halten, die überlebt nachdem Garbage Collection von Young Generation.
- Tenured Raum:. Dieser Speicherpool enthält Objekte, die nach mehreren Müllsammelmitteln Objekt überlebt, die nach der Garbage Collection von Survivor Raum überlebten
Permanent Generation:. Dieser Speicherpool als Name sagt auch permanente Klasse Metadaten und Deskriptoren Informationen enthalten, so PermGen Raum immer für Klassen reserviert und diejenigen, die zu den Klassen zum Beispiel statischer Elemente gebunden ist
Java8 Update:. PermGen wird ersetzt mit metaSpace , das sehr ähnlich ist
Hauptunterschied ist, dass metaSpace Wiedergrößen dynamisch das heißt, es kann zur Laufzeit erweitern.
Java metaSpace Raum: unbegrenzt (default)
Code-Cache (Virtual oder reserviert.): Wenn Sie HotSpot Java VM verwenden diese enthält Code-Cache-Bereich, enthalten Speicher, der für die Erstellung und Speicherung von nativen Code verwendet werden
Was ist die junge Generation?
Die Young Generation ist, wo alle neuen Objekte zugeordnet sind und im Alter. Als die junge Generation füllt, führt dies zu einer kleineren Garbage Collection. Eine junge Generation voller toter Objekte sehr schnell gesammelt. Einige überlebten Objekte sind gealtert und schließlich zu der alten Generation bewegen.
Was ist die alte Generation?
Die alte Generation wird verwendet, überlebende Objekte speichern lang. Typischerweise wird ein Schwellenwert für die junge Generation Objekt festgelegt und wenn das Alter erfüllt ist, wird das Objekt der alten Generation bewegt. Schließlich wird die alte Generation Bedürfnisse gesammelt werden. Dieses Ereignis wird ein Groß Garbage Collection
genanntWas ist die permanente Generation?
Die Permanent Generation enthält Metadaten, die von der JVM erforderlich, um die Klassen und Methoden in der Anwendung verwendet zu beschreiben. Die permanente Generation wird von der JVM zur Laufzeit bevölkert basierend auf Klassen in Verwendung durch die Anwendung.
PermGen mit metaSpace ersetzt wurde, da Java 8 Release.
PermSize & MaxPermSize werden die Parameter jetzt ignoriert werden
eingebenWie funktioniert die drei Generationen interact / beziehen sich auf einander?
Bildquelle & oracle TechNetwork Tutorial Artikel: http: //www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
" Der General Garbage Collection Prozess " in oben Artikel beschreibt die Wechselwirkungen zwischen ihnen mit vielen Diagrammen.
Hier finden Sie aktuelle Zusammenfassung Diagramm:
eingebenDie virtuelle Java-Maschine ist in drei Generationen organisiert: eine junge Generation, eine alte Generation, und eine permanente Generation. Die meisten Objekte werden zunächst in der jungen Generation zugeordnet. Die alte Generation enthält Objekte, die eine bestimmte Anzahl von jungen Generation Sammlungen überlebt haben, sowie einige große Objekte, die in der alten Generation direkt zugeordnet werden können. Die permanente Generation hält Objekte, dass der JVM bequem findet die Garbage Collector hat verwalten, wie Objekte beschreiben, Klassen und Methoden, sowie die Klassen und Methoden selbst.
Speicher in SunHotSpot JVM ist in drei Generationen organisiert: junge Generation, alte Generation und permanente Generation.
- Young Generation. Die neu erstellte Objekte zu der jungen Generation zugeordnet sind
- Alte Generation: Wenn die neuen Objektanforderungen für eine größere Heap-Speicher, wird es direkt in den alten gen zugeordnet. Auch Objekte, die ein paar GC-Zyklen überlebt haben, wird auf den alten gen d.h lange lebte Objekte Haus in alten gen gefördert.
- Permanent Generation: Die permanente Generation hält Objekte, dass der JVM bequem findet die Garbage Collector hat verwalten, wie Objekte Klassen und Methoden zu beschreiben, sowie die Klassen und Methoden selbst .
Zur Info:. Der permanente gen ist kein Teil des Java Heap betrachtet
Wie funktioniert die drei Generationen interact / beziehen sich auf einander? Objekte (mit Ausnahme der große) werden zunächst an die junge Generation zugeordnet. Wenn ein Objekt bleibt nicht nach x lebendig. Sammelzyklen von Müll es wird auf den alten / tenured gen gefördert. Daher können wir sagen, dass die junge Generation die kurzlebigen Objekte enthält, während die alten gen die Objekte enthält, eine lange Lebensdauer haben. Die permanente gen nicht interact mit den anderen zwei Generationen.