1

我想知道下面的代码是否是内存泄漏,因为谷歌只是出现了奇怪的例子。基本上,如果我有课Tree

public class Tree{

     private Bird[] birds;

     public Tree(){
          birds = new Bird[100];
     }

}

我持有一个Tree这样的类引用:

Tree myTree = new Tree();

然后不久之后我将该引用设置为null

myTree = null;

垃圾收集器会用树类处理所有 100 个分配的鸟吗?还是我需要一种delete()方法?我知道 Java 没有析构函数,但这个多层类示例仍然让我感到困惑:

里面Tree.java

public void deleteBirds{
     birds = null;
}
4

1 回答 1

6

垃圾收集器会用树类处理所有 100 个分配的鸟吗?

好吧,您的代码实际上并没有创建任何Bird. 它只是创建一个数组,并且该数组的每个元素都将从null开始。

但是,基本答案是“是”——如果您没有其他任何东西可以引用数组,并且没有其他任何东西可以引用Bird您可能在其他地方创建的任何对象,那么垃圾收集器会处理它们。您几乎可以肯定不应该编写任何类型的“删除”方法。

您可能也不需要您的myTree = null;声明......如果它是一个超出范围的局部变量,或者是一个对象中的实例变量,无论如何都会有资格进行垃圾收集,那么它就没有意义了。

相对较新的 Java 程序员可能需要一段时间才能学会信任垃圾收集器并放弃控制……但是一旦你这样做了,你的代码会简单得多:)

于 2014-04-21T10:01:59.147 回答