我正在阅读 Joshua Bloch 的“Effective Java programming”。在这本书中,他建议不要使用“finalize”块,因为它不能保证被执行。任何人都可以对此进行更多解释或提供一些文章的链接来解释这一点详细地?
问问题
989 次
3 回答
1
除了 andrewmu 提到的问题之外,终结器的另一个问题与频繁创建/销毁的对象有关。
当您为具有高创建/销毁率的类定义终结器时,您将负载添加到终结器线程,可能会减慢这些对象的垃圾回收率。这些对象不是在 GC 发生时立即释放,而是在终结器线程队列中等待首先被终结。这增加了内存不足错误的风险。
于 2010-08-05T11:07:16.613 回答
1
finalize 的一个问题是,如果您的程序调用它不会被调用System.exit()
- 为了解决这个问题,我认为 Josh Block 建议您Runtime.addShutdownHook()
改用它。
于 2010-08-05T10:30:57.250 回答
0
另外:如果您忘记调用super.finalize(),这可能是一个错误。所以 finalize() 的实现很容易出错。
于 2010-08-21T16:36:43.187 回答