Ich erstelle ein Beispiel-Demo-Programm für mich zu verstehen, dass, wie kann ich die Referenz von statischen Variablen, Methoden in Java mit Garbage Collector freizugeben?
Ich verwende schwache Referenz, um den Garbage Collector nicht zu verhindern.
Klasse Sample
Klasse User
statische Felder sind der Klasse und nicht einer einzelnen Instanz zugeordnet.
statische Felder werden bereinigt, wenn der ClassLoader, der die Klasse enthält, entladen ist. In vielen einfachen Programmen ist das nie.
Wenn die Felder mit Instanzen verknüpft und aufgeräumt werden sollen, dann wird die Instanz aufgeräumt und zu Instanzfeldern gemacht, nicht zu statischen Feldern.
System.gc () erzwingt das Ausführen von Garbage Collector nicht. Es ist nur ein Vorschlag an JVM, dass es wahrscheinlich eine gute Zeit ist, den Garbage Collector auszuführen. Siehe diese Frage - Wann macht System.gc () irgendetwas ?
Anders als das Programm, um Ihre Frage zu beantworten
Nein. Methoden werden nicht als Garbage Collected verwendet, da sie nicht im Heap vorhanden sind.
Statische Variablen gehören zur Klasseninstanz und werden nach dem Laden nicht gelöscht () (für die meisten allgemeinen Klassenlader)
Sie sollten verstehen, dass System.gc();
den Garbage Collector nicht aufruft. Es bittet GC nur höflich, etwas Müll zu entfernen. GC entscheidet, was zu tun ist und wann er beginnt. Erwarten Sie also nicht, dass Sie sofort einen Effekt sehen, wenn Sie System.gc();
aufrufen, null
der Variablen usw. Zuweisen.
GC entfernt alle Objekte, auf die nicht zugegriffen werden kann. Wenn also der Code-Block verlassen wurde, wo die Variable definiert wurde, kann das Objekt entfernt werden. Durch die Zuweisung von Null wird die Referenz entfernt. Eine schwache Referenz verhindert nicht, dass GC das Objekt entfernt.
Ich hoffe, diese Erklärung hilft.
Tags und Links java reference garbage-collection static