我有一个包含一些大对象的类:
public class MyClass {
BigObject bo;
public MyClass() { ... }
}
我应该像下面那样做一个关闭方法吗:
public void close() {
bo = null;
}
我认为这有利于垃圾收集(?)我走对了吗?我应该如何清理此类?
最佳答案
I think this is good for garbage collection
不,它只会让代码更困惑。
什么将保存对 MyClass
实例的引用?如果您确实需要 MyClass
的实例保持 Activity 状态,而不是 BigObject
,那么 - 只有这样 - 您是否应该费心将 bo
设置为无效的。但同时,你也应该考虑你的设计。通常,一个类的所有状态在其整个生命周期中对它都很重要。该规则也有异常(exception),但它们相对较少。
当 MyClass
的实例符合垃圾回收条件时,其 bo
变量的值将与 BigObject
的实例是否存在无关有资格进行垃圾回收,所以它是否被设置为 null 并不重要...但它确实对您最终的代码量产生了很大的影响不必自己尝试手动清理。
您应该清理流、 native 句柄等资源 - 但通常您可以让垃圾收集器处理内存。
关于Java 关闭/清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15646501/