[英]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()
手动清理的大多数资源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.