有效的Java——永远不要依赖终结器来更新关键的持久状态



为什么不应该这样做?由于终结器在执行垃圾回收时会被调用,为什么我们不能在这里添加持久相关的代码?

正如本书所解释的

JLS不仅不能保证终结器被迅速处决,并不能保证他们会被处决完全完全有可能,甚至有可能终止而不在某些对象上执行终结器更长的可达性。

它表示关键(!)持久数据。让终结器写出持久数据是可以的,但如果不写这些数据,就必须是可以的。

由于缺少关键数据是不好的,所以不应该进入终结器。

但是,当GC必须收集所有内容时,怎么能不调用终结器呢?这一次,应用程序可以被强制终止,从而永远不会给GC留下运行的机会。

最新更新