Heim > Java > JavaErste Schritte > Hauptteil

Was sind die JVM-Garbage-Collection-Algorithmen?

青灯夜游
Freigeben: 2023-01-13 00:40:09
Original
32893 Leute haben es durchsucht

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.

Was sind die JVM-Garbage-Collection-Algorithmen?

Die Betriebsumgebung dieses Tutorials: Windows7-System, Java8-Version, DELL G3-Computer.

JVM-Garbage-Collection-Algorithmus


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:

  • Markierung: Durchlaufen Sie den Speicherbereich und markieren Sie die benötigten Objekte recycelt werden.
  • Löschen: Durchlaufen Sie den Speicher erneut und recyceln Sie den markierten Speicher.

Abbildung:

Was sind die JVM-Garbage-Collection-Algorithmen?

Was sind die JVM-Garbage-Collection-Algorithmen?

Nachteile:

  • Effizienzprobleme; der Speicherplatz wird zweimal durchlaufen (das erste Mal wird markiert, das zweite Mal gelöscht).
  • Speicherplatzproblem: Es ist einfach, eine große Anzahl von Speicherfragmenten zu generieren. Wenn ein größerer Speicher benötigt wird, kann kein Teil gefunden werden, das den Anforderungen entspricht, sodass der GC erneut gestartet werden muss.

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:

Was sind die JVM-Garbage-Collection-Algorithmen?

Was sind die JVM-Garbage-Collection-Algorithmen?

Vorteile

  • Im Vergleich zum Mark-Clean-Algorithmus löst es das Problem der Speicherfragmentierung.
  • Effizienter (merken Sie sich beim Bereinigen des Speichers die erste und letzte Adresse und löschen Sie sie sofort).

Nachteile:

  • Die Speicherauslastung ist nicht hoch, es kann jeweils nur die Hälfte des Speichers genutzt werden.

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:

  • Markieren: Markieren Sie diejenigen, die recycelt werden müssen.
  • Organisation: Verschieben Sie die überlebenden Objekte an ein Ende des Speichers und bereinigen Sie dann den nutzlosen Speicher direkt.

Abbildung:

Was sind die JVM-Garbage-Collection-Algorithmen?Was sind die JVM-Garbage-Collection-Algorithmen?

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:

  • In der neuen Generation sterben jedes Mal viele Objekte. Die alte Generation dient als Speichergarantie und übernimmt einen Kopieralgorithmus.
  • In der alten Generation haben Objekte eine lange Überlebenszeit und es können entweder Markierungssortierungs- oder Markierungsreinigungsalgorithmen verwendet werden.

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage