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();
}
}

最新文章

  1. python模块(json和pickle模块)
  2. RequireJS与Backbone简单整合
  3. java selenium针对多种情况的多窗口切换
  4. php动态读取数据清除最右边距
  5. ubuntu14.04LS中安装SSH
  6. history对象
  7. Centos 多个mysql数据库
  8. 超酷创意HTML5动画演示及代码
  9. netstat Recv-Q和Send-Q
  10. DesigningFormsinAccess2010
  11. C# 枚举用法
  12. 几何概型 uva11722
  13. 改变FileUpload文件上传控件的显示方式,选择文件后自动上传
  14. LeetCode 557 Reverse Words in a String III 解题报告
  15. 关于JAVA中包装类的是什么类型传递这个问题的笔记
  16. stop-hbase.sh一直处于等待状态
  17. 为准确生成执行计划更新统计信息-analyze与dbms_stats
  18. iOS10网络权限数据
  19. luoguP5074 Eat the Trees
  20. [SQL基础]入门

热门文章

  1. Python学习(学习视频b站小甲鱼)
  2. JS高级---案例:贪吃蛇小游戏
  3. 安装ipython[win/linux]
  4. Html学习笔记(二)
  5. 手把手教你做一个python+matplotlib的炫酷的数据可视化动图
  6. Linux - gitlab的命令
  7. Linux shell sed 命令详解
  8. 2017年陕西省网络空间安全技术大赛——一维码——Writeup
  9. ARM架构Linux环境安装python2.7.9
  10. 根据IP地址查找MAC地址