我正在阅读Joshua Bloch撰写的“有效Java编程。我在本书中建议不要使用”finalize“块,因为它不能保证执行。任何人都可以解释一下这个或者给出一些文章的链接这详细解释了这个?
答案 0 :(得分:1)
最终确定的一个问题是,如果您的程序调用{{1}},则不会调用它 - 为了解决这个问题,我认为Josh Block建议您改为使用System.exit()
。
答案 1 :(得分:1)
除了andrewmu提到的终结器之外,终结器的另一个问题与频繁创建/销毁的对象有关。
为具有高创建/破坏率的类定义终结器时,会向终结器线程添加负载,这可能会降低这些对象的垃圾回收率。这些对象在终结器线程队列中等待首先完成,而不是在GC发生时立即释放。这会增加内存不足错误的风险。
答案 2 :(得分:0)
加:如果你忘了打电话给 super.finalize(),那可能是一个错误。所以finalize()的实现容易出错。