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



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

例如

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

由于我已经完成了obj并且不再引用它,我该怎么办? 将其设置为 null 或调用 finalize();?

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

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

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

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

至于叫finalize(),不要。让垃圾收集器来处理这个问题。但请注意,finalize是一种与其他方法一样的方法。你引用的文本的意思是,GC 不会多次调用它,无论您的代码可能调用它的次数是多少。

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

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

如果对象保持必须确保按需清理的状态,则为此实现不同的方法。 close()是此类方法的流行名称。 如果可能的话,最好避免实施finalize()。 GC 将自动处理您可能认为要在 finalize() 中手动清理的大多数资源。

最新更新