JVM-Garbage-Collection-Algorithmus: 1. „Mark-Clear“-Algorithmus: Markieren Sie zuerst alle Objekte, die recycelt werden müssen, und recyceln Sie dann alle markierten Objekte gleichmäßig, nachdem die Markierung abgeschlossen ist. 2. Kopieralgorithmus; Teilen Sie den Speicher in zwei gleich große Blöcke und verwenden Sie jeweils nur einen davon. 3. „Mark-Organization“-Algorithmus; 4. Generationssammlungsalgorithmus.
Die Betriebsumgebung dieses Tutorials: Windows7-System, Java8-Version, DELL G3-Computer.
Zwei Konzepte:
Neue Generation: ein Bereich, in dem Objekte mit kurzen Lebenszyklen gespeichert werden.
Alte Generation: ein Bereich, in dem Gegenstände mit langen Lebenszyklen gelagert werden.
Gleiche Punkte: Sie befinden sich alle auf dem Java-Heap
1. Mark-Clear-Algorithmus
Ausführungsschritte:
Abbildung:
Nachteile:
2. Der Kopieralgorithmus
teilt den Speicher in zwei gleich große Blöcke und verwendet jeweils nur einen davon. Wenn ein Block aufgebraucht ist und GC ausgelöst wird, werden die verbleibenden Objekte im Block in einen anderen Bereich kopiert und der nutzlose Speicher wird dann sofort bereinigt. Wenn der GC das nächste Mal ausgelöst wird, werden die überlebenden Teile dieses Blocks in diesen Block kopiert, und dann wird dieser Block gelöscht und der Zyklus wiederholt sich.
Abbildung:
Vorteile
Nachteile:
Verbesserungen
Untersuchungen zeigen, dass die meisten Objekte der neuen Generation „leben und sterben“, das heißt, der Lebenszyklus ist sehr kurz und je länger das Objekt lebt, desto schwieriger ist es, es zu recyceln. Wenn GC auftritt, müssen viele Objekte recycelt werden und nur sehr wenige überleben. Daher gibt es nur sehr wenige Objekte, die in einen anderen Speicher verschoben werden müssen, sodass keine Notwendigkeit besteht, den Speicherplatz 1:1 aufzuteilen. Stattdessen wird die gesamte neue Generation im Verhältnis 8:1:1 in drei Bereiche aufgeteilt. Der größte Bereich wird als Eden-Bereich bezeichnet, die beiden kleineren Bereiche heißen „To Survivor“ bzw. „From Survivor“.
Während des ersten GC müssen nur die überlebenden Objekte von Eden nach To kopiert werden. Dann wird das gesamte Eden-Gebiet recycelt. Wenn GC erneut auftritt, kopieren Sie das verbleibende Eden und To nach From und wiederholen Sie diesen Vorgang. Auf diese Weise macht der in jeder neuen Generation verfügbare Speicher 90 % der gesamten neuen Generation aus, was die Speichernutzung erheblich verbessert. [Verwandte Empfehlung: Java-Video-Tutorial]
Aber es gibt keine Garantie dafür, dass die überlebenden Objekte immer weniger als 10 % der gesamten neuen Generation ausmachen. Zu diesem Zeitpunkt kann die kopierte Vergangenheit nicht gespeichert werden, also ein weiterer Teil Der Speicher wird hier verwendet, genannt Für die alte Generation werden Zuordnungsgarantien gegeben und Objekte werden in der alten Generation gespeichert. Wenn es nicht ausreicht, wird OOM geworfen.
Alte Generation: Speichert Objekte der neuen Generation, die mehrere Recyclingversuche überstanden haben (Standard 15 Mal).
3. Markierungs-Organisationsalgorithmus
Da der vorherige Kopieralgorithmus eine relativ hohe Überlebensrate aufweist, ist es sinnlos und Zeitverschwendung, immer wieder zu kopieren. Daher wurde für das Alter ein „Markierungssortierungsalgorithmus“ vorgeschlagen.
Ausführungsschritte:
Abbildung:
4. Generationssammlungsalgorithmus
Die meisten kommerziellen virtuellen Maschinen verwenden derzeit diesen Generationen-Sammelalgorithmus. Dieser Algorithmus hat keinen neuen Inhalt. Er teilt den Speicher lediglich entsprechend der Überlebenszeit des Objekts in die neue Generation auf, sodass verschiedene Objekte anvisiert werden können. Bereich, übernehmen Sie den entsprechenden Algorithmus. Zum Beispiel:
Der Unterschied zwischen MinorGC und FullGC
MinorGC: Die Müllabfuhr erfolgt in der neuen Generation. Aufgrund der Eigenschaften der neuen Generation ist MinorGC sehr häufig und die Recyclinggeschwindigkeit ist relativ hoch jeder Sammlung ist ebenfalls groß.
FullGC: Die Speicherbereinigung der alten Generation, auch MajorGC genannt, ist relativ langsam, etwa zehnmal langsamer als MinorGc. Ein FullGC wird normalerweise von mehreren MinorGCs begleitet.
Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmiervideos! !
Das obige ist der detaillierte Inhalt vonWas sind die JVM-Garbage-Collection-Algorithmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!