Arbeitet der Garbage Collector in Java mit statischen Variablen oder Methoden?

7

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

%Vor%

Klasse User

%Vor%     
gaurav kumar 29.10.2012, 17:39
quelle

4 Antworten

16

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.

    
Peter Lawrey 29.10.2012, 17:50
quelle
4

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 ?     

user1700184 29.10.2012 17:42
quelle
4

Anders als das Programm, um Ihre Frage zu beantworten

  1. Nein. Methoden werden nicht als Garbage Collected verwendet, da sie nicht im Heap vorhanden sind.

  2. Statische Variablen gehören zur Klasseninstanz und werden nach dem Laden nicht gelöscht () (für die meisten allgemeinen Klassenlader)

Arun Manivannan 29.10.2012 17:49
quelle
3

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.

    
AlexR 29.10.2012 17:44
quelle