嗨,我对幻影参考有一个疑问。我所理解的 finalize 方法是在对象进行垃圾收集之前调用的。但是有时如果对象不符合垃圾回收条件,则 finalize 方法将不会执行。
现在谈论这个 finalize 方法将被调用时的幻像引用。
总是在幻像引用中调用 finalize。
我对此很困惑。请帮我。
嗨,我对幻影参考有一个疑问。我所理解的 finalize 方法是在对象进行垃圾收集之前调用的。但是有时如果对象不符合垃圾回收条件,则 finalize 方法将不会执行。
现在谈论这个 finalize 方法将被调用时的幻像引用。
总是在幻像引用中调用 finalize。
我对此很困惑。请帮我。
终结器永远不能保证被调用,无论是否存在幻像引用。不要依赖终结器来处理代码的任何关键部分,因为无法保证它们会被及时调用或实际上根本不会被调用。
许多人主张你根本不应该使用终结器,因为它们很难正确使用。
当对象仅通过幻像引用变得可用时,在finalize()
调用第一个 GC 方法之后,在第二个 GC 之后,引用被排队。如果在该幻像引用被清除(或本身变得不可用)之后,则在第三次 GC 后清除内存。
Finalize 总是会在你期望的时候被调用,但不是必须的。可能会发生调用只会在 JVM 关闭时进行(假设您不简单地杀死程序)。finalize()
你不应该为了做重要的工作而依赖。但是实现一个有用的finalize()
并包含一个调用super.finalize()
也是一个好习惯。