我想知道下面这段代码是否是内存泄漏,因为谷歌只提供了奇怪的例子。基本上,如果我有一个类 Tree
:
public class Tree{
private Bird[] birds;
public Tree(){
birds = new Bird[100];
}
}
我持有一个对 Tree
的类引用,如下所示:
Tree myTree = new Tree();
然后不久之后我将该引用设置为 null
:
myTree = null;
是否所有 100 个分配的 Birds 都由垃圾收集器处理树类? 或者我是否需要 delete()
方法?我知道 Java 没有析构函数,但这个多层类示例仍然让我感到困惑:
在 Tree.java
中:
public void deleteBirds{
birds = null;
}
最佳答案
Will all the 100 allocated Birds be taken care of WITH the tree class by the garbage collector?
好吧,您的代码实际上并没有创建 Bird
的任何实例。它只是创建一个数组,该数组的每个元素都将以 null
开头。
但是,基本答案是"is"——如果您没有任何其他对象引用该数组,并且没有其他对象引用您可能在其他地方创建的任何 Bird
对象,那么垃圾收集器会处理它们。您几乎可以肯定不应该编写任何类型的“删除”方法。
您可能不需要您的 myTree = null;
语句...如果它是超出范围的局部变量,或者对象中的实例变量将有资格无论如何都要进行垃圾回收,那就没意义了。
相对较新的 Java 程序员可能需要一段时间才能学会信任垃圾收集器并放弃控制...但是一旦您这样做了,您的代码就会简单得多:)
关于类的 Java 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23195035/