将对象引用设置为 null 或调用 finalize() 方法?

Set object reference to null or call the finalize() method?

作为一个java初学者,我想问一下在大型项目中是应该将对象引用设置为null,还是调用finalize方法?

例如,

while( obj... some code here){
 //code stuff
}
obj = null; // or obj.finalize();

既然我已经完成了 obj 并且没有更多的参考资料,我应该如何处理它?将其设置为 null 或调用 finalize();?

我读了 java doc 但是这一段 The finalize method is never invoked more than once by a Java virtual machine for any given object. 让我很困惑。这是否意味着即使我使用它,除非 GC 决定这样做,否则它根本不会做任何事情?那么,我将 obj 设置为 null 的决定会有帮助吗?

这一切都假设它是一个大型项目,并且范围尚未结束,以便 GC 自行解除分配。谢谢。

都没有。如果 obj 不再在代码中进一步使用(并且没有其他引用与 obj 相同的对象),则该对象将不再可访问并将成为垃圾收集的候选者。

obj 设置为 null 不会有任何效果(YMMV 取决于垃圾收集器的实现)。

至于打电话给finalize(),不要。让垃圾收集器来处理。但请注意 finalize 是一种与其他方法一样的方法。你引用的文字是说 GC 不会多次调用它,无论你的代码可能调用它多少次。

从不 手动调用对象的 finalize() 方法。它仅供 VM 使用。 VM 将在适当的时间调用它(作为垃圾收集过程的一部分)。

您可以将引用变量设置为 null 以可能使对象比其他方式更快地符合垃圾收集条件,但这样做不会导致它立即被 GC 处理。 (请注意,您使用 = 运算符进行赋值;== 是一个关系运算符,用于 测试 其操作数的相等性。)

如果您的对象维护您必须确保按需清理的状态,则为此实施不同的方法。 close() 是此类方法的流行名称。最好尽可能避免实施 finalize()。 GC 将自动处理您可能认为需要在 finalize().

中手动清理的大部分资源