Hat der garbage collector die Arbeit auf statische Variablen oder Methoden in java?
Erstelle ich ein Probe-demo-Programm für die machen mir zu verstehen, dass, wie kann ich die freigeben die Referenz der statischen Variablen, Methoden in java mit garbage collector?
Ich bin mit Schwachen Referenz für die nicht-Verhinderung der garbage collector.
Klasse Sample
public class Sample {
private static String userName;
private static String password;
static {
userName = "GAURAV";
password = "password";
}
public static String getUserName(){
return userName;
}
public static String getPassword(){
return password;
}
}
Klasse User
import java.lang.ref.WeakReference;
public class User {
public static void main(String[] args) {
/**
* Created one object of Sample class
*/
Sample obj1 = new Sample();
/**
* I can also access the value of userName through it's class name
*/
System.out.println(obj1.getUserName()); //GAURAV
WeakReference<Sample> wr = new WeakReference<Sample>(obj1);
System.out.println(wr.get()); //com.test.ws.Sample@f62373
obj1 = null;
System.gc();
System.out.println(wr.get()); //null
/**
* I have deallocate the Sample object . No more object referencing the Sample oblect class but I am getting the value of static variable.
*/
System.out.println(Sample.getUserName()); //GAURAV
}
}
- Der garbage collector sammelt Objekte, nicht die Variablen. Eine variable ist ein container, der /enthält/ eine Referenz. Und vor allem, in den meisten Fällen Sie don ' T wollen, um Durcheinander mit garbage collection.
- Zu viele Statik. Warum sind Sie, mischen Sie?
- Nein, Sie haben zu bereinigen nach sich selbst
Du musst angemeldet sein, um einen Kommentar abzugeben.
statische Felder, die der Klasse zugeordnet sind, nicht einer einzelnen Instanz.
statische Felder bereinigt werden, wenn der ClassLoader die halten die Klasse entladen. In vielen einfachen Programmen, dass wird nie.
Wenn Sie möchten, dass die Felder mit einem zugeordneten Instanzen und bereinigt dann die Instanz ist aufgeräumt, machen Sie zu Instanz-Feldern, nicht statische.
Andere als das Programm, um Ihre Frage zu beantworten
Nicht. Methoden sind nicht Müll gesammelt, weil Sie nicht existieren in den heap in den ersten Platz.
Statischen Variablen gehören zu den Klasse-Instanz und nicht von der garbage Collection eingesammelt einmal geladen (für die meisten Allgemeinen Classloadern)
System.gc() nicht zwingen garbage collector zu laufen. Es ist nur ein Vorschlag, um die JVM, dass es wahrscheinlich ist ein guter Zeitpunkt zum ausführen der garbage collector. Sehen Sie, diese Frage - Wenn System.gc() alles tun
Sollten Sie verstehen, dass
System.gc();
nicht nennen garbage collector. Es ist einfach höflich fragt, GC zu entfernen, einige Müll. GC entscheidet, was und Wann zu tun, zu starten. Also, nicht erwarten, dass Sie werden sehen, eine unmittelbare Wirkung, wenn die BerufungSystem.gc();
zuweisennull
auf variable usw.GC löscht alle Objekte, die nicht zugänglich sind keiner Weise. Also wenn der code block verlassen, wo die variable definiert wurde, kann das Objekt entfernt werden. Assiging null entfernt die Referenz. Eine schwache Referenz wird nicht verhindern, dass GC vom entfernen des Objekts.
Ich hoffe, diese Erklärung hilft.