Heim  >  Artikel  >  Web-Frontend  >  Java Virtual Machine Learning – Garbage-Collection-Algorithmus

Java Virtual Machine Learning – Garbage-Collection-Algorithmus

黄舟
黄舟Original
2017-02-17 10:45:271615Durchsuche

Ablaufverfolgungssammler

Der Ablaufverfolgungssammler verwendet eine zentralisierte Verwaltungsmethode, um den Referenzstatus zwischen Objekten ausgehend von einer Reihe von GC-Roots global aufzuzeichnen Objekte, durchsuchen Sie alle Referenzketten abwärts von diesen Knoten. Wenn ein Objekt keine Referenzkette zu GC Roots hat, beweist dies, dass dieses Objekt nicht verfügbar ist.

Obwohl in der Abbildung unten die Objekte Object6, Object7 und Object8 aufeinander verweisen, ist ihr GC Wurzeln sind nicht erreichbar und gelten daher als recycelbare Objekte.


Zu den Objekten, die als GC-Wurzeln verwendet werden können, gehören:

Virtuelle Maschine Ein Referenzobjekt im Stapel (lokale Variablentabelle im Stapelrahmen).

Objekt, auf das durch die statische Eigenschaft der Klasse im Methodenbereich verwiesen wird

Objekt, auf das Konstanten im Methodenbereich verweisen

JNI-Referenzobjekt im lokalen Methodenstapel.


Das Wichtigste Es gibt drei Implementierungsalgorithmen: Kopieren, Entfernen von Markierungen und Komprimieren von Markierungen.

1. Mark-clear-Algorithmus

Der Mark-and-Clear-Algorithmus ist der grundlegendste Erfassungsalgorithmus, und andere Erfassungsalgorithmen basieren auf dieser Idee. Der Markierungs- und Löschalgorithmus ist in zwei Stufen unterteilt: „Markieren“ und Löschen“: Zuerst werden die Objekte markiert, die recycelt werden müssen, und nach Abschluss der Markierung werden die Objekte einheitlich gelöscht.

Seine Hauptnachteile:

① Der Markierungs- und Löschprozess ist nicht effizient

② gelöscht Es wird eine große Anzahl diskontinuierlicher Speicherfragmente generiert.


2. Replikationsalgorithmus

Es teilt die verfügbare Speicherkapazität in zwei gleich große Blöcke auf, wobei jeweils nur ein Block verwendet wird. Wenn dieser Block aufgebraucht ist, kopieren Sie die verbleibenden Objekte in einen anderen Block und bereinigen Sie dann sofort den verwendeten Speicherplatz. Auf diese Weise wird jedes Mal ein Teil des Speichers recycelt und es kommt nicht zu einer Fragmentierung. Bewegen Sie einfach den Zeiger des Heaps und weisen Sie den Speicher der Reihe nach zu. Dies ist einfach zu implementieren und effizient auszuführen.

Hauptnachteile:

Der Speicher wird auf die Hälfte seiner ursprünglichen Größe reduziert.

                                         >

3 . Tags
- Sortieralgorithmus


Der Markierungsvorgang stimmt mit überein Der „Mark-Clear“-Algorithmus bereinigt nicht nur das Objekt direkt, sondern bereinigt auch die nutzlosen. Nachdem das Objekt fertiggestellt ist, werden alle verbleibenden Objekte an ein Ende verschoben und die Zeiger aktualisiert, die auf ihre Objekte verweisen.

Hauptnachteile:

Auf der Grundlage der Markierungsfreigabe müssen Objekte verschoben werden. Die Kosten sind relativ hoch, aber der Vorteil besteht darin, dass es keine Speicherfragmentierung gibt.

Referenzzählsammler

Der Referenzzählsammler verwendet eine dezentrale Verwaltungsmethode und zeichnet auf, ob Das Objekt wird über einen Zähler referenziert. Wenn der Zähler 0 erreicht, bedeutet dies, dass das Objekt nicht mehr verwendet wird und recycelt werden kann.

Hauptnachteile:

Zirkuläres Referenzszenario Recycling kann nicht In der folgenden Abbildung verweisen beispielsweise ObjectC und ObjectB aufeinander. Selbst wenn ObjectA seine Referenzen auf ObjectC und ObjectB freigibt, kann es nicht recycelt werden. sunJDK verwendet diese Methode bei der Implementierung von GC nicht.



Das Obige ist der Inhalt des Java Virtual Machine Learning - Garbage Collection-Algorithmus. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn). )!


Stellungnahme:
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