Tworzę przykładowy program demonstracyjny, aby zrozumieć, w jaki sposób mogę zwolnić odwołanie do zmiennych statycznych, metod w java za pomocą garbage collectora?Czy garbage collector działa na statycznych zmiennych lub metodach w java?
Używam słabej referencji, aby nie zapobiegać zbieraczowi.
Klasa 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;
}
}
Klasa 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
}
}
Śmieciarka zbiera przedmioty, a nie zmienne. Zmienna jest kontenerem, który/zawiera/odniesienie. A co najważniejsze, w większości przypadków nie chcesz robić bałaganu ze zbieraniem śmieci. – ignis
Zbyt wiele statystyk. Dlaczego je miksujesz? –
Nie, będziesz musiał sprzątać po sobie – Nactus