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?Arbeitet der Garbage Collector in Java mit statischen Variablen oder Methoden?
Ich verwende schwache Referenz, um den Garbage Collector nicht zu verhindern.
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()); //[email protected]
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, keine Variablen. Eine Variable ist ein Container, der/eine Referenz enthält. Und am wichtigsten ist, dass Sie sich in den meisten Fällen nicht mit der Garbage Collection herumschlagen wollen. – ignis
Zu viele Statiken. Warum mischst du sie? –
Nein, müssen Sie nach sich selbst reinigen – Nactus