クラスのインスタンスはA
ガベージコレクションされますか、それともメモリに永久に残りますか?
オブジェクトがガベージ コレクションの対象となり、そのfinalize()
メソッドが呼び出され、このメソッド内で実行のライブ スレッドによってオブジェクトにアクセスできるようになった場合、ガベージ コレクションは行われないことを私は知っています。
public class A{
String someString = null;
private A a=null;
public String getSomeString() {
return someString;
}
public void setSomeString(String someString) {
this.someString = someString;
}
@Override
protected void finalize() throws Throwable {
try {
this.a=this;
System.out.println("final called");
} finally {
super.finalize();
}
}
}
public static void main(String args[]) throws Exception {
A s1=new A();
s1=null;
System.gc();
System.out.println("gc called");
......
}
Can we switch off finalizers? に触発されました。