Ich habe schon lange kein Buch über Java mehr gelesen. Kürzlich habe ich James Goslings << Java -Programmiersprache >> gelesen und einige Leserscheine gemacht. In diesem Teil geht es um Müllrecycling.
1. Müllrecycling
Objekte werden unter Verwendung von neu erstellt, aber es gibt keinen entsprechenden Löschvorgang, um den vom Objekt besetzten Speicher zu recyceln. Wenn wir die Verwendung eines Objekts vervollständigen, müssen wir nur den Verweis auf dieses Objekt stoppen:
-> Ändern Sie den Verweis, um auf ein anderes Objekt zu zeigen
-> Zeigen Sie den Verweis auf NULL
-> Kehren Sie aus der Methode zurück, damit die lokalen Variablen der Methode nicht mehr existieren
Schlüsselpunkte:
-> Wenn wir ein Objekt aus einem ausführbaren Code nicht erreichen können, kann der Speicherplatz recycelt werden.
-> Müllrecycling bedeutet, dass wir uns keine Sorgen um baumelnde Referenzen machen müssen. Eine falsche Referenz bezieht sich auf einen Verweis auf den gelöschten Speicherraum. Dieses Problem besteht in Systemen, in denen Programmierer direkt steuern können, wenn Objekte gelöscht werden.
-> Müllsammlermodell: Referenzzählermethode (keine kreisförmige Referenz lösen), Mark-and-Sweep.
2. Zusammenfassung
Methode abschließen
-> Nachdem der Müllsammler festgelegt hat, dass das Objekt nicht erreichbar ist und dass der Raum des Objekts recycelt wird, nennt der Müllsammler diese Methode.
-> Diese Methode kann alle vom Objekt verwendeten nicht nachempfindlichen Ressourcen löschen und kann für jedes Objekt nur einmal aufgerufen werden. Selbst wenn die Ausführung dieser Methode das Objekt wieder erreichbar macht und dann sofort wieder nicht erreichbar ist, kann die Methode nur einmal aufgerufen werden.
Die Methode -> Finalize kann in einem bestimmten Zeitraum aufgerufen werden und kann niemals aufgerufen werden (die virtuelle Java -Maschine endet).
Überschreiben Sie die Methode ab
-> Wenn ein Objekt zu Müll wird, werden die anderen Objekte, auf die es sich bezieht, wahrscheinlich auch zu Müll. Dieser Müll wurde möglicherweise beendet, bevor sie die von uns geschriebene Abschlussmethode bezeichnet haben, sodass sie möglicherweise in einem unvorhersehbaren Zustand stehen.
-> Überschreiben Sie die Abschlussmethode müssen die Super.finalize -Methode hinzufügen. Es ist am besten, es in den endgültigen Satz hinzuzufügen. Stellen Sie sicher, dass einige der in seiner Superklasse deklarierten Inhalte ebenfalls beendet werden können.
III. Verwandte Klassen und Methoden zur Interaktion mit Müllsammlern
Klasse: runTime.getRuntime (), System
Methoden: gc (), runfinalisierung (), freememory (), totalMemory (), maxmemory ()
Die Systemklasse unterstützt statische GC ()- und Runfinalisierung () -Methoden, die die entsprechenden Methoden auf dem aktuellen Laufzeitobjekt aufrufen.
Iv. Barrierefreiheit Status und Referenzobjekte
Ein Objekt kann nur Müll erfasst werden, wenn keine Referenz angibt, aber manchmal möchten wir das Objekt als Müll sammeln, wenn noch eine ausgewählte Referenz auf das Objekt zeigt.
Der einzige Zweck eines Referenzobjekts besteht darin, eine Referenz auf ein anderes Objekt zu behalten, das als Referenz bezeichnet wird. Normalerweise behalten wir Verweise auf Objekte über Felder oder lokale Variablen bei, können jedoch direkte Verweise auf Referenzobjekte beibehalten, die das von uns tatsächlich benötigte Objekt umwickeln. Der Müllkollektor kann bestimmen, ob der Restverweis auf ein Objekt über die Referenzobjektflächen auf das Objekt verwiesen wird, sodass er entscheiden kann, ob das Objekt recyceln soll. Die Stärke des Referenzobjekts bestimmt das Verhalten des Müllsammlers, und gewöhnliche Referenzen sind die mächtigsten Referenzen.
Referenzklasse
-> Paket: java.lang.ref
-> Typische Methoden: Get (), Clear (), Enqueue (), isenqueed ()
Zitier- und Zugänglichkeitsstärke
-> Objekte sind stark erreichbar: gewöhnliche Referenz
-> Objekt ist sanft erreichbar
-> Objekte sind schwach erreichbar: schwachreferenz
-> Objekte sind praktisch zugänglich (Phantom erreichbar): Phantomreferenz
-> Objekte sind nicht erreichbar: Keine Referenzverbindungen, sobald das Objekt schwach zugänglich (oder Spalte schwach) wird, kann es beendet werden. Wenn das Objekt nach der Beendigung nicht erreichbar ist, kann es recycelt werden.
Die Phase der Objektzustandsfähigkeit löst den Müllsammler aus, um ein geeignetes Verhalten an den relevanten Referenzobjekttypen durchzuführen:
-> Weiche erreichbare Objekte können vom Müllsammler recycelt werden. Wir können sicher sein, dass alle Weiche für Softreferenzobjekte gelöscht werden, bevor ein OutofMemoryError -Fehler geworfen wird.
-> Gut zugängliche Objekte werden vom Müllsammler recycelt.
-> Das virtuelle erreichbare Objekt ist nicht wirklich erreichbar, da auf sein Referenzobjekt nicht durch Phantomreferenz zugegriffen werden kann und seine GET -Methode immer null zurückgibt. Das Vorhandensein virtueller Referenzen kann jedoch verhindern, dass Objekte recycelt werden, bevor virtuelle Referenzen explizit gelöscht werden. Virtuelle Referenzen ermöglichen es uns, Objekte zu handhaben, deren Abschlussmethoden aufgerufen wurden, sodass es sicher ist, dass sie "tot" sind.