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