【发布时间】:2009-12-03 23:43:54
【问题描述】:
我一般认为资源清理是在 finally 块中完成的,
最近我在一个类中发现了这个特殊的代码 sn-p,它覆盖了 Object 类的 finalize() 方法。
protected void finalize() {
try {
In.close();
Out.close();
socket.close();
}
catch (Exception e) {
//logger code here
}
}
这是个好主意吗? finalize() 相对于finally 的优缺点是什么?
【问题讨论】:
-
finalized() 不应该被使用。如果开发人员忘记 close(),请不要帮助他。让资源泄漏,因此可以注意到并修复问题。 Java 7 将引入更好的资源关闭方式,因此最终将不再有 finalized() 的借口。
-
IIRC,一个线程专用于在各种对象上运行 finalize()。这是让系统在性能方面陷入困境的一种方式。
标签: java