The method finalize() from the type Object is deprecated since version 9,finalize()方法已被弃用

March 8, 2022

从 Java 9 开始,Object.finalize() 方法被标记为 deprecated。

简要地说,有关使用finalize()的问题几点是:

众所周知,它们很难正确编程 特别是当对象意外运行(但正确)时,它们可能会意外运行 finalize()方法可以轻松打破子类/超类关系 finalize()方法之间没有顺序 给定对象的finalize方法最多由JVM调用一次,即使该对象已“复活” 无法保证finalize()方法的及时性,甚至根本无法保证 没有明确的注册或注销机制 即使您编写的对象正确使用了finalize()方法,将对象集成到较大的系统中也会导致问题。通常的问题是,创建垃圾回收的工作线程需要与垃圾收集器保持平衡。如果垃圾收集器落后了,那么至少某些收集器可以“阻止”并进行完整的收集以赶上。finalize()使这种交互复杂化。即使垃圾收集器跟上了应用程序线程的速度,finalize()方法也可能会导致瓶颈并降低系统速度,或者可能导致释放资源时出现延迟,从而导致这些资源的耗尽。这是一个系统问题。即使使用finalize()方法的实际代码正确无误,在正确编程的系统中仍然可能出现问题。

要记住,一个对象如果已经被标记为该回收,那么该对象就不应被救活。