首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类的Java内存泄漏

类的Java内存泄漏
EN

Stack Overflow用户
提问于 2014-04-21 09:59:15
回答 1查看 87关注 0票数 1

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

代码语言:javascript
复制
public class Tree{

     private Bird[] birds;

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

}

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

代码语言:javascript
复制
Tree myTree = new Tree();

然后不久,我设置了对null的引用

代码语言:javascript
复制
myTree = null;

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

内部Tree.java

代码语言:javascript
复制
public void deleteBirds{
     birds = null;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-21 10:01:59

所有分配的100个鸟类是否都由垃圾收集器来处理树类?

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

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

你可能也不需要你的myTree = null;声明..。如果它是一个超出作用域的局部变量,或者是对象中的一个实例变量,它无论如何都会成为垃圾收集的条件,那么它就没有意义了。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23195035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档