作为一个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()
中手动清理的大多数资源。