Die Konzepte schwacher und weicher Referenzen unterscheiden sich von der Verwendung von Referenzklassen. Wir alle wissen, dass der Garbage Collector das Gedächtnis für Objekte zurückfordert, die den Recyclingkriterien erfüllen, aber nicht alle Programmierer wissen, dass die Recyclingkriterien von der Art der Referenz abhängen, die auf das Objekt hinweist. Dies ist der Hauptunterschied zwischen schwachen Referenzen und weichen Referenzen in Java. Wenn ein Objekt nur eine schwache Referenz hat, die darauf hinweist, recycelt der Müllkollektor das Objekt sofort, was eine dringende Möglichkeit ist, es zu recyceln. Wenn es weiche Referenzen auf diese Objekte gibt, werden sie nur dann recycelt, wenn das JVM Speicher benötigt. Das besondere Verhalten schwacher und weicher Zitate macht sie in einigen Fällen sehr nützlich. Zum Beispiel: Soft Referenzen können gut verwendet werden, um Cache zu implementieren. Schwache Referenzen sind sehr geeignet, um Metadaten zu speichern, z. B. die Speicherung von Klassenloaderreferenzen. Wenn keine Klasse geladen ist, gibt es auch keinen Hinweis auf den Classloader. Sobald die letzte starke Referenz entfernt ist, wird nur der schwache Referenzklassenloader recycelt. In diesem Artikel werden wir über verschiedene Arten von Java -Referenzen sprechen, wie z. B. starke Referenz und Phantomreferenz.
Schwache Referenzen gegen weiche Referenzen in Java
In Java gibt es vier Arten von Referenzen:
1. Starke Referenz
2. Schwachreferenz
3.. Sozidreferenz
4. Phantomreferenz
Starke Referenzen sind die einfachsten Referenzen, die wir bei der Programmierung verwenden, z. Jedes Objekt, auf das durch eine starke Referenz hingewiesen wird, kann vom Müllsammler nicht recycelt werden, und diese Objekte werden im Programm benötigt. Schwache Referenzen werden durch die Klassenklasse der Klasse java.lang.ref.Weakreferenz dargestellt, und Sie können mit dem folgenden Code schwache Referenzen erstellen:
Die Codekopie lautet wie folgt:
Zähler = neuer Zähler ();
Weapreference <Coccounter = New Wecreference <Coces (Zähler);
counter = null; // now Counter object is eligible for garbage collection
现在只要你给强引用对象counter赋空值null,该对象就可以被垃圾回收器回收。 Da das Objekt zu diesem Zeitpunkt keine anderen starken Referenzen mehr enthält, kann auch die Wachcounter -Punkte auf das Objekt nicht verhindern, dass der Müllsammler das Objekt recycelt. Wenn das Objekt umgekehrt eine weiche Referenz enthält, wird das Zählerobjekt nicht sofort recycelt, es sei denn, das JVM benötigt Speicher. Weiche Referenzen in Java werden durch die Klasse von Java.lang.Ref.Softreferenz dargestellt.
Die Codekopie lautet wie folgt:
Counter Prime = neuer Zähler ();
Softreference Soft = New Softrreference (Prime);
Prime = NULL; // jetzt Counter -Objekt ist für die Müllsammlung berechtigt, wird jedoch nur gesammelt, wenn JVM unbedingt Speicher benötigt
Nachdem die starke Referenz leer ist, erzeugt das zweite Verhalten des Codes eine weiche Referenz.鉴于软引用和弱引用的这一区别,软引用更适用于缓存机制,而弱引用更适用于存贮元数据。 Ein weiteres Beispiel für die Verwendung schwacher Referenzen ist schwachhashmap, eine weitere Implementierung der Kartenschnittstelle neben HashMap und Treemap. WeakHashMap有一个特点:map中的键值(keys)都被封装成弱引用,也就是说一旦强引用被删除,WeakHashMap内部的弱引用就无法阻止该对象被垃圾回收器回收。
Die virtuelle Referenz ist die dritte verfügbare Referenz im Paket java.lang.ref, die durch die Klasse java.lang.ref.PhantomReference -Klasse dargestellt wird. Objekte mit virtuellen Referenzen können jederzeit vom Müllsammler recycelt werden. Ähnlich wie schwache Referenzen und weiche Referenzen können Sie über den folgenden Code virtuelle Referenzen erstellen:
Die Codekopie lautet wie folgt:
DigitalCounter digit = new DigitalCounter ();
PhantomReference Phantom = New PhantomReference (Ziffer);
Ziffer = null;
Sobald die starke Referenz entfernt ist, kann das Digitalcounter -Objekt in der dritten Reihe jederzeit vom Müllsammler recycelt werden. Da es nur eine virtuelle Referenz auf das Objekt gibt, kann die virtuelle Referenz nicht verhindern, dass der Müllsammler das Objekt zurückerobert.
Zusätzlich zum Verständnis schwacher Referenzen, weicher Referenzen, virtuellen Referenzen und schwachem HashMap müssen Sie auch Referenzqueue verstehen. Beim Erstellen schwacher Referenzen, weicher Referenzen und virtueller Referenzen können Sie die Referenzwarteschlange Referenzqueue über den folgenden Code bereitstellen:
Die Codekopie lautet wie folgt:
Referencequeue RefQueue = New Referencequeue ();
DigitalCounter digit = new DigitalCounter ();
PhantomReference <Digitalcounter> Phantom = Neue PhantomReference <Digitalcounter> (Ziffern, RefQueue);
Referenzinstanzen werden zur Referenzwarteschlange hinzugefügt, und Sie können Objekte recyceln, indem Sie die Referenzwarteschlange jederzeit abfragen. Der Lebenszyklus eines Objekts kann in der folgenden Abbildung beschrieben werden: