首页 > 编程语言 > 详细

java finalize学习

时间:2020-01-29 20:31:22      阅读:69      评论:0      收藏:0      [点我收藏+]

1 finalize()调用的时机

与C++的析构函数(对象在清除之前析构函数会被调用)不同,在Java中,由于GC的自动回收机制,因而并不能保证finalize方法会被及时地执行(垃圾对象的回收时机具有不确定性),也不能保证它们会被执行(程序由始至终都未触发垃圾回收)。

2 为什么应该避免使用它

首先,由于finalize()方法的调用时机具有不确定性,从一个对象变得不可到达开始,到finalize()方法被执行,所花费的时间这段时间是任意长的。我们并不能依赖finalize()方法能及时的回收占用的资源,可能出现的情况是在我们耗尽资源之前,gc却仍未触发,因而通常的做法是提供显示的close()方法供客户端手动调用。
另外,重写finalize()方法意味着延长了回收对象时需要进行更多的操作,从而延长了对象回收的时间。





例:
当强制gc的时候,finalize方法中有类的调用则不会打印这句话
public class Finallize {
boolean checkout = false;
Finallize(boolean checkout){
checkout = checkout;
}
Finallize(){}

void checkIn(){
checkout = false;
}

@Override
protected void finalize(){
if(checkout){
Utils.print(String.format("%d","check out"));
}

try {
super.finalize();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}


public static void main(String[] args) {
Finallize finallize = new Finallize();
finallize = null;
System.gc();
}
}

java finalize学习

原文:https://www.cnblogs.com/liangzilingyu/p/12241121.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!