Die Konzepte von starkem Zitat, weichem Zitat, schwachem Zitat und virtuellem Zitat
Starke
Starke Zitate beziehen sich auf gemeinsame Zitate im Programmcode. Zum Beispiel sind das Objekt und die STR im folgenden Code beide starke Zitate:
Object Object = new Object (); String str = "Hallo";
Solange ein Objekt eine starke Referenz hat, wird das JVM dieses Objekt definitiv nicht recyceln. Auch wenn das Gedächtnis mangelt, würde der JVM eher einen Fehler aus der Memory werfen, als ein solches Objekt zu recyceln.
Zum Beispiel der folgende Code:
public class main {public static void main (String [] args) {new main (). fun1 (); } public void fun1 () {Object Object = new Object (); Objekt [] objarr = neues Objekt [1000]; }}Beim Laufen zu Objekt [] objarr = neues Objekt [1000]; Beim Laufen zu diesem Satz wirft der JVM einen OOM -Fehler auf und recycelt nicht das vom Objekt angezeigte Objekt. Es ist jedoch zu beachten, dass sowohl Objekt als auch Objarr nicht mehr existieren, sodass die Objekte, auf die sie hinweisen, von der JVM recycelt werden.
Wenn Sie die Assoziation zwischen einer starken Referenz und einem Objekt unterbrechen möchten, können Sie die Referenz auf NULL anzeigen, damit das JVM das Objekt zum richtigen Zeitpunkt recycelt.
Weiche
Weiche Referenzen werden verwendet, um einige nützliche, aber nicht erforderliche Objekte zu beschreiben, und werden in Java unter Verwendung der Klasse java.lang.ref.softreferenz dargestellt. Für weiche Referenzen zugehörige Objekte recyceln das JVM das Objekt nur, wenn nicht genügend Speicher vorliegt. Daher kann dies gut verwendet werden, um das Problem von OOM zu lösen, und diese Funktion ist sehr geeignet für die Implementierung von Caching: wie Webseiten -Caching, Bilddarming usw.
Eine weiche Referenz kann in Verbindung mit einer Referenzwarteschlange (Referenz) verwendet werden. Wenn das von der Soft Reference verwiesene Objekt von der JVM recycelt wird, wird die weiche Referenz zur zugehörigen Referenzwarteschlange hinzugefügt. Hier ist ein Beispiel für die Nutzung:
Import Java.lang.Ref.WeakReference; public class main {public static void main (String [] args) {Wecreference <String> sr = new Wecreference <string> (neuer String ("Hallo"); System.out.println (sr.get ()); System.gc (); // den GC des JVM für Müllsammelsystem.Out.println (sr.get ()) benachrichtigen; }}Schwachreferenz
Schwache Referenzen werden auch verwendet, um nicht essentielle Objekte zu beschreiben. Wenn die JVM Müllsammlung ausführt, werden Objekte, die mit schwachen Referenzen verbunden sind, recycelt, unabhängig davon, ob das Gedächtnis ausreicht. Verwenden Sie in Java die Java.lang.Ref.Weakreferenzklasse, um sie darzustellen. Hier ist ein Beispiel für die Nutzung:
Import Java.lang.Ref.WeakReference; public class main {public static void main (String [] args) {Wecreference <String> sr = new Wecreference <string> (neuer String ("Hallo"); System.out.println (sr.get ()); System.gc (); // den GC des JVM für Müllsammelsystem.Out.println (sr.get ()) benachrichtigen; }}Phantomreferenz
Virtuelle Referenzen unterscheiden sich von den vorherigen weichen Referenzen und schwachen Referenzen und wirken sich nicht auf den Lebenszyklus des Objekts aus. Verwenden Sie in Java Java.lang.Ref.PhantomReference -Klasse, um sie darzustellen. Wenn ein Objekt einer virtuellen Referenz zugeordnet ist, kann es jederzeit vom Müllsammler recycelt werden, genau wie keine Referenz zugeordnet ist.
Es ist zu beachten, dass virtuelle Referenzen in Verbindung mit der Referenzwarteschlange verwendet werden müssen. Wenn sich der Garbage Collector darauf vorbereitet, ein Objekt zu recyceln, fügt er diese virtuelle Referenz in die zugehörige Referenzwarteschlange hinzu. Das Programm kann verstehen, ob das referenzierte Objekt Müll erhoben wird, indem er beurteilt, ob der Referenzwarteschlange eine virtuelle Referenz hinzugefügt wurde. Wenn das Programm feststellt, dass der Referenzwarteschlange eine virtuelle Referenz hinzugefügt wurde, kann es die erforderlichen Aktionen ergreifen, bevor der Speicher des referenzierten Objekts recycelt wird.
Weiteres Verständnis von weichen und schwachen Zitaten
Wir verwenden oft starke Zitate beim Schreiben von Code. Für die anderen drei Arten von Zitaten sind die am häufigsten verwendeten weichen Zitate und schwache Zitate. Diese beiden haben sowohl Ähnlichkeiten als auch Unterschiede. Sie alle werden verwendet, um nicht wesentliche Objekte zu beschreiben, aber Objekte, die mit weichen Referenzen zugeordnet sind, werden nur dann recycelt, wenn nicht genügend Speicher vorliegt, während Objekte, die mit schwachen Referenzen zugeordnet sind, immer recycelt werden, wenn der JVM Müll erfasst wird. In Anbetracht der oben genannten Merkmale eignen sich weiche Referenzen für das Zwischenspeichern. Wenn das Speicher nicht ausreicht, kann der JVM den Speicher recyceln. Schwache Referenzen können verwendet werden, um Speicherleckage in der Rückruffunktion zu verhindern. Da Rückruffunktionen häufig anonyme interne Klassen sind und implizit Referenzen auf externe Klassen speichern, wird die Rückruffunktion in einem anderen Thread zurückgerufen, und wenn die externe Klasse zu diesem Zeitpunkt recycelt werden muss, speichern Speicherlecks, da die anonymen internen Klassen stark auf externe Klassen speichern.
In dem obigen Artikel wird kurz über den Unterschied zwischen den vier Zitiermethoden in Java handelt, die ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.