1

我有一个包含一些大对象的类:

public class MyClass {

    BigObject bo;

    public MyClass() { ... }
}

我应该做一个像下面这样的关闭方法:

public void close() {
    bo = null;
}

我认为这对垃圾收集有好处(?)我在正确的轨道上吗?我应该如何处理这些类的清理?

4

2 回答 2

4

我认为这对垃圾收集有好处

不,它只会让代码更混乱。

什么会保存对 的实例的引用MyClass?如果您确实需要 的实例MyClass来保持活动状态,而不是BigObject,那么 - 并且只有这样 - 您应该费心将其设置bo为 null。但同时,你也应该考虑你的设计。通常,一个类的所有状态对它的整个生命周期都很重要。该规则有例外,但它们相对罕见。

当实例MyClass符合垃圾回收条件时,其bo变量的值将与实例BigObject是否符合垃圾回收条件无关,因此它是否被设置为 null 无关紧要......但它确实使在您最终不必编写尝试手动清理的代码量方面存在很大差异

您应该清理诸如流、本机句柄等资源 - 但通常您可以让垃圾收集器处理内存。

于 2013-03-26T20:19:21.820 回答
0

一旦您丢失了对外部MyClass对象的引用,内部BigObject引用就会自动被理解为不可访问,因此无论它是否对垃圾收集器都null没有影响。不要用这些不必要的代码弄乱你的代码库;编写代码,充分利用 Java 中复杂的垃圾收集子系统的优势和服务。

于 2013-03-26T20:19:10.290 回答