概述
demo代码:
import java.util.concurrent.TimeUnit;
public class ObjectHelpSelf {
private static ObjectHelpSelf objectHelpSelf = null;
@Override
protected void finalize() throws Throwable {
System.out.println("进入finalize方法中,对象开始自救");
//重新赋值
ObjectHelpSelf.objectHelpSelf = this;
}
public static void main(String[] args) throws InterruptedException {
objectHelpSelf = new ObjectHelpSelf();
objectHelpSelf = null;
System.gc();
//finalize方法的优先级很低,所以睡眠一秒,方便看到效果
TimeUnit.SECONDS.sleep(1);
System.out.println("第一次gc后,objectHelpSelf=" + objectHelpSelf);
objectHelpSelf = null;
System.gc();
//finalize方法的优先级很低,所以睡眠一秒,方便看到效果
TimeUnit.SECONDS.sleep(1);
System.out.println("第二次gc后,objectHelpSelf=" + objectHelpSelf);
}
}
运行结果如下:
总结
可以发现使用了finalize()方法,在第一次的gc时,ObjectHelpSelf对象没有被回收,自救成功,而第二次gc时,ObjectHelpSelf对象为null,说明对象被回收了,这是因为任何一个对象的finalize()方法最多只会被系统自动调用一次,不然每次gc,对象都自救,那对象就永远会存在,造成类似内存溢出的效果了。同时该方法不建议使用,仅做了解即可。
最后
以上就是称心超短裙为你收集整理的使用finalize()方法让对象进行自救的全部内容,希望文章能够帮你解决使用finalize()方法让对象进行自救所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复