我在读Joshua Bloch写的"Effective programming“这本书,他建议不要使用"finalize”代码块,因为它不能保证被执行。有没有人能更详细地解释这一点,或者给出一些详细解释这一点的文章的链接?
发布于 2010-08-05 18:30:57
finalize的一个问题是,如果你的程序调用System.exit(),它将不会被调用--为了解决这个问题,Josh Block建议你改用Runtime.addShutdownHook()。
发布于 2010-08-05 19:07:17
除了andrewmu提到的问题之外,终结器的另一个问题与频繁创建/销毁的对象有关。
当您为具有高创建/销毁速率的类定义终结器时,您会向终结器线程添加负载,这可能会减慢这些对象的垃圾收集率。这些对象不是在GC发生时立即释放,而是在终结器线程队列中等待首先完成。这会增加发生内存不足错误的风险。
发布于 2010-08-22 00:36:43
另外:如果你忘记调用super.finalize(),,这可能是一个错误。所以finalize()的实现是容易出错的。
https://stackoverflow.com/questions/3413796
复制相似问题