Java内存泄漏了类

时间:2014-04-21 09:59:16

标签: java memory-leaks multi-layer

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

public class Tree{

     private Bird[] birds;

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

}

我持有Tree的类引用,如下所示:

Tree myTree = new Tree();

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

myTree = null;

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

Tree.java内:

public void deleteBirds{
     birds = null;
}

1 个答案:

答案 0 :(得分:6)

  

垃圾收集器是否会在树类中处理所有100个已分配的Bird?

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

然而,基本答案是“是” - 如果你没有其他任何东西都有对数组的引用,并且没有别的东西引用你可能在其他地方创建的任何Bird对象,那么垃圾收集器会照顾他们。你几乎肯定不应该编写任何类型的“删除”方法。

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

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