嗨,我对幻影参考有一个疑问。我理解的是,在对象进行垃圾收集之前调用finalize方法。但是有时候如果对象不符合垃圾回收的条件,那么finalize方法将不会执行。
现在讨论调用此finalize方法时的幻像引用。
是否总是在幻像参考中调用finalize。
我对此非常困惑。请帮我。
答案 0 :(得分:5)
无论是否存在幻像引用,都无法保证终结器被调用。不要依赖终结器来代码的任何关键部分,因为不能保证它们会被及时调用或实际调用。
许多人主张你根本不应该永远使用终结器,因为它们难以正确使用。
答案 1 :(得分:1)
当对象仅通过幻像引用变为可用时,则在调用第一个GC finalize()
方法之后,在第二个GC之后,引用将入队。如果在清除幻像引用之后(或自身不可用),则在第三次GC之后清除内存。
答案 2 :(得分:0)
终结将始终被调用,但不是必要的,当你期望它。可能会发生这样的情况,即只能在JVM关闭时进行调用(假设您不是简单地终止该程序)。您不应该依赖finalize()
来完成重要的工作。但是,实施有用的finalize()
并包含对super.finalize()
的调用也是一种很好的做法。