public class A {
public A() {
System.out.println("A()");
}
protected void finalize() throws Throwable {
System.out.println("~A()");
};
}
public class TestFinalize {
public static void main(String[] args) {
A a = new A();
a = null;
System.gc();
}
}
可以看到这里输出:
A()
~A()
假如将代码修改成这样子:
public class TestFinalize {
public static void main(String[] args) {
A a = new A();
System.gc();
}
}
可以看到这里输出:
A()
原因也很简单,在这里调用System.gc()的时候,临时变量还在生命周期中。所以不会被回收。
有时候
public class TestFinalize {
public static void main(String[] args) {
A a = new A();
a = null;
System.gc();
}
}
还是不会输出~A(),原因也很简单,System.gc()仅仅是建议性的gc,是否执行gc要看gc系统。