finalize方法如何与java中的幻像引用一起使用

时间:2011-04-16 19:30:50

标签: java finalizer phantom-reference

嗨,我对幻影参考有一个疑问。我理解的是,在对象进行垃圾收集之前调用finalize方法。但是有时候如果对象不符合垃圾回收的条件,那么finalize方法将不会执行。

现在讨论调用此finalize方法时的幻像引用。

是否总是在幻像参考中调用finalize。

我对此非常困惑。请帮我。

3 个答案:

答案 0 :(得分:5)

无论是否存在幻像引用,都无法保证终结器被调用。不要依赖终结器来代码的任何关键部分,因为不能保证它们会被及时调用或实际调用。

许多人主张你根本不应该永远使用终结器,因为它们难以正确使用。

答案 1 :(得分:1)

当对象仅通过幻像引用变为可用时,则在调用第一个GC finalize()方法之后,在第二个GC之后,引用将入队。如果在清除幻像引用之后(或自身不可用),则在第三次GC之后清除内存。

答案 2 :(得分:0)

终结将始终被调用,但不是必要的,当你期望它。可能会发生这样的情况,即只能在JVM关闭时进行调用(假设您不是简单地终止该程序)。您不应该依赖finalize()来完成重要的工作。但是,实施有用的finalize()并包含对super.finalize()的调用也是一种很好的做法。