将对象引用设置为 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()
.
中手动清理的大部分资源
作为一个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()
.