第7条:避免使用终极方法
2015-06-09 19:28
274 查看
终结方法(finalizer)通常是不可预测的,也是很危险的,一般情况下是不必要的。
一般在java中,一般用try-catch来完成回收一个对象所占资源的工作。
终结方法的缺点:
1.不能保证会被及时地执行
因为从一个对象变得不可到达开始,到它的终结方法被执行,所花费的时间是任意长的。
因此,注重时间(time-critical)的任务不应该由终结方法来完成。
例如:
用终结方法来关闭已打开的文件,这是一个严重错误。
2.使用终结方法有一个非常严重的性能损失
例子:
在一般机器上,创建和销毁一个简单对象的时间大约为5.6ns。
而增加一个终结方法使时间增加到了2400ns。
那么问题来了,如果类的对象中封装的资源确实需要终止但是又不编写终结方法,该怎么办?
只需要提供一个显式的终止方法,一般可以配合try-catch使用
例如:
InputStream,OutputStream和java.sql.Connection方法上的close方法
一般在java中,一般用try-catch来完成回收一个对象所占资源的工作。
终结方法的缺点:
1.不能保证会被及时地执行
因为从一个对象变得不可到达开始,到它的终结方法被执行,所花费的时间是任意长的。
因此,注重时间(time-critical)的任务不应该由终结方法来完成。
例如:
用终结方法来关闭已打开的文件,这是一个严重错误。
2.使用终结方法有一个非常严重的性能损失
例子:
在一般机器上,创建和销毁一个简单对象的时间大约为5.6ns。
而增加一个终结方法使时间增加到了2400ns。
那么问题来了,如果类的对象中封装的资源确实需要终止但是又不编写终结方法,该怎么办?
只需要提供一个显式的终止方法,一般可以配合try-catch使用
例如:
InputStream,OutputStream和java.sql.Connection方法上的close方法
相关文章推荐
- linux 平台性能分析工具
- Android控件整理
- 摘抄的几段话
- wangzhi
- Remove Linked List Elements
- sql server2008 安全性管理机制
- 20150527常量变量
- 20150527常量变量_练习_运算符表达式练习
- Toast的简化用法
- [Swust OJ 715]--字典序问题(组合数预处理/数位dp)
- 在线判题 (模拟)http://202.196.1.132/problem.php?id=1164
- HDU - 4734 F(x) (2013成都网络游戏,数字DP)
- 异常
- 20150527运算符表达式
- 集锦续集
- 关于Android Studio无法更新安装而导致无法启动的问题
- 【leetcode】【单链表】【109】Convert Sorted List to Binary Search Tree
- 【leetcode】【单链表】【109】Convert Sorted List to Binary Search Tree
- Linux下编译安装Apache及模块
- Xcode 6.1 做ipa企业级分发(In-House模式)详细步骤