在finalize方法中复活java对象
/*** 该类用于演示在对象的finalize()方法中复活对象(来自《实战java虚拟机》-葛一鸣)* 2017年4月4日 下午9:06:00* @version v1.0*/public class CanReliveObj{public static CanReliveObj obj;@Overrideprotected void finaliz
·
/**
* 该类用于演示在对象的finalize()方法中复活对象(来自《实战java虚拟机》-葛一鸣)
* 2017年4月4日 下午9:06:00
* @version v1.0
*/
public class CanReliveObj
{
public static CanReliveObj obj;
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("CanReliveObj finalize called !!!");
obj = this;//在finalize方法中复活对象
}
@Override
public String toString() {
return "I am canReliveObj";
}
public static void main(String[] args) throws InterruptedException {
obj = new CanReliveObj();
obj = null; //将obj设为null
System.gc();//垃圾回收
Thread.sleep(1000);//
if(obj == null) {
System.out.println("obj is null");
} else {
System.out.println("obj is alive");
}
System.out.println("第2次调用gc后");
obj = null;//由于obj被复活,此处再次将obj设为null
System.gc();//再次gc
Thread.sleep(1000);
if(obj == null) {
//对象的finalize方法仅仅会被调用一次,所以可以预见再次设置obj为null后,obj会被垃圾回收,该语句会被调用
System.out.println("obj is null");
} else {
System.out.println("obj is alive");
}
}
}
运行上述代码后结果如下
CanReliveObj finalize called !!!
obj is alive
第2次调用gc后
obj is null
更多推荐
已为社区贡献1条内容
所有评论(0)