我想知道下面的代码是否是内存泄漏,因为Google只是出现了一些奇怪的例子。基本上,如果我有一个类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;
}发布于 2014-04-21 10:01:59
所有分配的100个鸟类是否都由垃圾收集器来处理树类?
实际上,您的代码并没有创建任何Bird实例。它只创建一个数组,该数组的每个元素都将是null。
但是,基本的答案是“是”--如果您没有其他任何对数组的引用,也没有任何其他的引用您可能在其他地方创建的任何Bird对象,那么垃圾收集器将处理它们。您几乎肯定不应该编写任何类型的“删除”方法。
你可能也不需要你的myTree = null;声明..。如果它是一个超出作用域的局部变量,或者是对象中的一个实例变量,它无论如何都会成为垃圾收集的条件,那么它就没有意义了。
相对较新的Java程序员需要一段时间才能学会信任垃圾收集器,并放弃控制.但是一旦你这样做了,你的代码就会简单得多:)
https://stackoverflow.com/questions/23195035
复制相似问题