Schwache Referenz in Java

WeakReference, SoftReference und PhantomReference wurden schon vor langer Zeit zur Java-API hinzugefügt, aber von den meisten Programmierern nicht effektiv genutzt. Der Grund dafür ist das geringere Wissen über das Konzept, wie diese APIs für die Verwaltung der Referenzen funktionieren. Im Grunde helfen diese APIs dem Garbage Collector, den Speicher zu beanspruchen, indem sie die Referenz auf die Objekte betrachten. WeakReference-Objekte werden mit höherer Priorität als die SoftReference durch Müll gesammelt. Ein Objekt, auf das nur durch schwache Referenzen verwiesen wird, gilt als nicht erreichbar (oder „schwach erreichbar“) und kann daher jederzeit erfasst werden.

Was ist WeakReference?

Ein Objekt ist nur dann für die Garbage Collection geeignet, wenn kein Verweis auf das Objekt vorhanden ist oder wenn es über einen schwachen Verweis verfügt. Schwache Referenz ist eine API, die der JVM anzeigt, dass das referenzierte Objekt weniger wichtig ist und durch Garbage Collection gesammelt werden kann. Sie können davon ausgehen, dass Referenzen wie ein Handle sind, das zum Aufrufen der tatsächlichen Objekte verwendet wird. Wenn für ein Objekt keine Referenz vorhanden ist, besteht keine Möglichkeit, dass das Objekt in der Anwendung verwendet wird. Dann ist es der perfekte Kandidat für die Müllabfuhr. Hier sind nicht alle Referenzen gleich. Der Garbage Collector weist jeder Referenz einen Punkt oder Wert zu. Schwache Referenzen werden zunächst immer durch Müll gesammelt.

Wenn Sie eine starke Referenz zu einer schwachen Referenz machen möchten, übergeben Sie die starke Referenz an den Konstruktor des entsprechenden Referenzobjekts, hier ist es WeakReference. WeakReference ist unter dem Paket java.lang.ref definiert. Zwei weitere verwandte Referenzobjekte sind SoftReference und PhantomReference.

Java-Referenztypen

WeakReference-Beispiel

Schauen wir uns ein Beispiel an, wie man eine schwache Referenz definiert.

Employee employee = new Employee(); // strong reference
WeakReference<Counter> weakCounter = new WeakReference<Employee>(employee); //making employee as weak reference
employee = null; // now Employee object is eligible for garbage collection

Wenn Sie sich nun den obigen Code ansehen, ist die erste Zeile zum Erstellen des Employee-Objekts eine starke Referenz. Dieses Objekt kann nicht durch Garbage Collection erfasst werden, da es die starke Referenz enthält. In der zweiten Zeile erstellen wir die WeakReference mithilfe der Referenzvariablen „employee“. Wenn dieser Referenz in der dritten Zeile „null“ zugewiesen wird, ist sie ein perfekter Kandidat für die Garbage Collection.

Diese Techniken wären dann sehr nützlich, wenn Ihre Anwendung Cache oder einen ähnlichen Ansatz zum Speichern großer Mengen von Objekten für kürzere Zeit verwendet und Sie dann wahrscheinlich eine Garbage Collection benötigen würden, um den Speicher effizient zu verwalten.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen