我是靠谱客的博主 称心超短裙,这篇文章主要介绍使用finalize()方法让对象进行自救,现在分享给大家,希望可以做个参考。

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()方法让对象进行自救内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(129)

评论列表共有 0 条评论

立即
投稿
返回
顶部