/**
* 运行结果如下:
* finalize()...
* is Alieve
* false
*/
public class TestGC {
public static TestGC testGC = null;
public static void main(String[] args) throws InterruptedException {
testGC = new TestGC();
//第一次去gc(),但testGC结果并未被回收,finalize()方法中存在当前对象this的引用
testGC = null;
System.gc();
// finalize()方法优先级低,线程等待0.5秒,进行自救
Thread.sleep(500);
if (testGC!=null) testGC.isAlieve();
else System.out.println(false);
//第二次去gc(),但testGC结果被回收,finalize()方法中存在当前对象this的引用
//但是,在这次gc()的时候,finalize()方法却并没有调用
//任何一个对象的finalize()方法仅会被系统自动调用一次,如果对象面临下一次的回收
//它的finalize()方法不会被再次执行
testGC = null;
System.gc();
// finalize()方法优先级低,线程等待0.5秒,进行自救
Thread.sleep(500);
if (testGC!=null) testGC.isAlieve();
else System.out.println(false);
}
public void isAlieve(){
System.out.println("is Alieve");
}
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("finalize()...");
TestGC.testGC = this;
}
}
网友评论