Voq*_*qus 5 java garbage-collection jvm
作为一个java初学者,我想询问是否应该将对象引用设置为null,或者在大型项目中调用finalize方法?
例如,
while( obj... some code here){
//code stuff
}
obj = null; // or obj.finalize();
Run Code Online (Sandbox Code Playgroud)
由于我完成了,obj 并没有更多的参考,它应该怎么办呢?将其设置为null或调用finalize();?
我读了java文档,但这段话The finalize method is never invoked more than once by a Java virtual machine for any given object.让我很困惑.这是否意味着即使我使用它,它也不会做任何事情,除非GC决定这样做?然后,我决定obj将null 设置为null吗?
这一切都假设它是一个大型项目,并且范围尚未结束,以便GC自行解除分配.谢谢.
都不是.如果obj代码中不再使用它(并且没有其他任何内容引用相同的对象obj),则该对象将不再可访问并将成为垃圾收集的候选对象.
设置obj为null无法实现任何功能(YMMV取决于垃圾收集器的实现).
至于打电话finalize(),不要.让垃圾收集器处理这个问题.但请注意,这finalize是一种与其他方法一样的方法.你引用的文字是说GC不会多次调用它,无论你的代码调用它的次数多少.
永远不要手动调用对象的finalize()方法。它仅供 VM 使用。VM 将在适当的时间调用它(作为垃圾收集过程的一部分)。
您可以将引用变量设置为 ,null以使对象比其他情况更早地符合垃圾回收条件,但这样做不会导致它立即被 GC 回收。(请注意,您使用=运算符进行赋值;==是一个关系运算符,用于测试其操作数的相等性。)
如果您的对象维护的状态必须确保按需清理,那么请为此实现不同的方法。 close()是此类方法的流行名称。finalize()如果可能的话,最好避免实施。GC 将自动处理您可能认为需要手动清理的大多数资源finalize()。
| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |