我有一个包含一些大对象的类:
public class MyClass {
BigObject bo;
public MyClass() { ... }
}
我应该采用如下方法:
public void close() {
bo = null;
}
我认为这对垃圾收集很有用(?)我是否在正确的轨道上?我应该如何处理这些类的清理?
答案 0 :(得分:4)
我认为这对垃圾收集很有用
不,它只是让代码更乱。
什么会引用MyClass
的实例?如果你真的需要MyClass
的实例来保持活着,而不是BigObject
,那么 - 只有这样 - 你是否应该将bo
设置为null。但与此同时,您还应该考虑您的设计。通常,类的所有状态在其整个生命周期中都很重要。该规则有例外,但它们相对较少。
当MyClass
的实例符合垃圾回收条件时,其bo
变量的值将与BigObject
的实例是否符合垃圾回收条件无关,因此它不会无论它是否被设置为空...但它确实在你最终的代码量方面产生很大的差异不必须写尝试自己手动清理。
你应该清理诸如流,本机句柄等资源 - 但通常你可以让垃圾收集器处理内存。
答案 1 :(得分:0)
一旦丢失对外部MyClass
对象的引用,内部BigObject
引用就会自动被理解为不可删除,因此它对垃圾收集器没有任何区别{{1} } 或不。不要用这些不必要的代码混乱您的代码库;编写充分利用Java中复杂垃圾收集子系统的优点和服务的代码。