JVM Learning Notes: JVM Memory Management und JVM Garbage Collection Concepts. Die JVM -Speicherstruktur besteht aus Heap, Stapel, lokalem Methodenstapel, Methodenbereich und anderen Teilen. Darüber hinaus verwendet JVM verschiedene Müllsammlungsmechanismen für die Download -Adressen der neuen Generation bzw. der alten Generation.
Schauen wir uns zunächst die JVM -Speicherstruktur an, die aus Heap, Stapel, lokalem Methodenstapel, Methodenbereich und anderen Teilen besteht. Das Strukturdiagramm ist unten gezeigt.
JVM Learning Notes JVM Memory Management und JVM Müllsammlung
JVM -Speicherstruktur
Die JVM -Speicherstruktur besteht aus Heap, Stapel, lokalem Methodenstapel, Methodenbereich und anderen Teilen. Das Strukturdiagramm lautet wie folgt:
1) Haufen
Der Speicher aller von neuen Objekte erstellten Objekte wird im Haufen zugewiesen, und ihre Größe kann durch -xmx und -xms gesteuert werden. Der Haufen ist in das Ceponyme und die alte Generation unterteilt, und das Ceponymous wird weiter in die Eden- und Survivor -Zonen unterteilt. Schließlich besteht Survivor aus Space und Tospace. Das Strukturdiagramm lautet wie folgt:
Eine neue Generation. Neue Objekte werden von der neuen Generation Speicher zugewiesen. Wenn Eden nicht ausreicht, werden die überlebenden Objekte auf Survivor übertragen. Die Größe der neuen Generation kann durch -xmn oder -xx gesteuert werden: Survivorratio kann verwendet werden, um das Verhältnis von Eden und Survivor zu kontrollieren. Wird verwendet, um Objekte zu speichern, die in der neuen Generation mehrere Müllsammlungen überlebt haben.
2) Stapel
Wenn jeder Thread jede Methode ausführt, gilt er für einen Stapelrahmen im Stapel. Jeder Stapelrahmen enthält einen lokalen variablen Bereich und einen Operand -Stapel, mit dem während dieses Methodenaufrufs temporäre Variablen, Parameter und Zwischenergebnisse gespeichert werden.
3) Lokaler Methodenstapel
Wird verwendet, um die Ausführung nativer Methoden zu unterstützen und den Status jeder nativen Methodenaufruf zu speichern
4) Methodenbereich
Speichert die zu geladenen Klasseninformationen, statische Variablen und endgültige Typkonstanten, Attribute und Methodeninformationen. JVM verwendet Permanetgeneration, um Methodenbereiche zu speichern, und die minimalen und maximalen Werte können durch -xx angegeben werden: Permsize und -xx: maxpermSize. Nachdem wir die JVM -Speicherstruktur eingeführt haben, schauen wir uns die Download -Adresse des JVM -Müllsammlungsmechanismus an.
JVM Müllsammlung Mechanismus
JVM nimmt verschiedene Müllsammlungsmechanismen für die neuen bzw. alten Generationen an
Die neue Generation von GC:
Das Ceponymous hat normalerweise eine kurze Überlebenszeit, so dass es basierend auf dem Kopieralgorithmus recycelt wird. Der sogenannte Kopieralgorithmus besteht darin, die überlebenden Objekte zu scannen und sie in einen neuen, vollständig nicht verwendeten Raum zu kopieren, der dem Ceponymous entspricht, das zwischen Eden und aus Space oder Tospace kopiert wird. Die neue Generation verwendet einen Leerlaufzeiger, um die GC -Auslöser zu steuern. Der Zeiger hält das zuletzt zugewiesene Objekt im Intervall der neuen Generation. Wenn es ein neues Objekt gibt, um Speicher zuzuweisen, wird es verwendet, um zu überprüfen, ob der Speicherplatz ausreicht. Wenn es nicht genug ist, wird GC ausgelöst. Wenn Objekte kontinuierlich zugewiesen werden, werden die Objekte allmählich von Eden zu Survivor und schließlich zur alten Generation wechseln.
Verwenden Sie JavavisualVM, um es klar zu betrachten und zu beobachten, dass das Objekt nach der vollständigen Generation an die alte Generation übertragen wird, und dann klar und weiter laden wird. Wenn die alte Generation voll ist, wird eine Ausnahme in der Ausnahme von OutofMemory gemeldet, wie in der folgenden Abbildung gezeigt:
In Bezug auf den Ausführungsmechanismus stellt JVM serielle GC (SerialGC), Parallel Recycling GC (Parallelscavenge) und Parallel GC (Parnew) zur Verfügung.
1) Serien GC
Der gesamte Scan- und Kopiervorgang wird auf einzelne Weise durchgeführt. Es eignet sich für Anwendungen mit einer einzigen CPU, einem kleinen Raum in der neuen Generation und nicht sehr hohe Anforderungen an die Pause. Es ist die Standard -GC -Methode auf Client -Ebene. Es kann gezwungen werden, es über -xx:+useerialGC anzugeben
2) Parallele Recycling von GC
Der gesamte Scan- und Replikationsprozess wird auf multi-thread-Weise durchgeführt. Es ist für Multi-CPU und Anwendungen mit kurzen Anforderungen an die Pause geeignet. Es ist die GC -Methode, die standardmäßig von der Serverebene verwendet wird. Es kann verwendet werden, um die Spezifikation von -xx:+UseParallelGC zu erzwingen und -xx: parallelgcThreads = 4 zu verwenden, um die Anzahl der Threads anzugeben.
3) Parallele GC
Verwendung mit gleichzeitiger GC mit alter Generation
Alte Generation GC:
Anders als die neue Generation überleben Objekte lange Zeit und sind relativ stabil. Daher wird der Markalgorithmus zum Recyceln verwendet. Die sogenannte Marke bedeutet, die überlebenden Objekte zu scannen und dann nicht markierte Objekte zu recyceln. Nach dem Recycling wird der leere Raum beim nächsten Mal entweder zusammengeführt oder für die einfache Zuweisung markiert. Kurz gesagt, es ist notwendig, den durch Gedächtnisfragmentierung verursachten Effizienzverlust zu verringern. In Bezug auf den Ausführungsmechanismus bietet JVM serielle GC (SerialMSC), Parallel GC (parallelMSC) und gleichzeitiger GC (CMS). Die spezifischen Algorithmusdetails müssen weiter untersucht werden.
Die obigen GC -Mechanismen müssen in Kombination verwendet werden, und die angegebene Methode ist in der folgenden Tabelle dargestellt:
Das obige ist der gesamte Inhalt des eingehenden Verständnisses der Arbeitsprinzipien von Java GC, die der Herausgeber Ihnen bringt. Ich hoffe, jeder wird Wulin.com mehr unterstützen ~