sgt*_*ale 1 java memory-leaks multi-layer
我想知道下面这段代码是否是内存泄漏,因为谷歌只是出现了奇怪的例子.基本上,如果我有一个班级Tree
:
public class Tree{
private Bird[] birds;
public Tree(){
birds = new Bird[100];
}
}
Run Code Online (Sandbox Code Playgroud)
我持有Tree
类似这样的类引用:
Tree myTree = new Tree();
Run Code Online (Sandbox Code Playgroud)
然后不久我将该引用设置为null
:
myTree = null;
Run Code Online (Sandbox Code Playgroud)
垃圾收集器是否会将所有100个已分配的鸟类与树类一起处理?或者我需要一个delete()
方法?我知道Java没有析构函数,但这个多层类示例仍然让我困惑:
里面Tree.java
:
public void deleteBirds{
birds = null;
}
Run Code Online (Sandbox Code Playgroud)
垃圾收集器是否会将所有100个已分配的鸟类与树类一起处理?
好吧,你的代码实际上并没有创建任何实例Bird
.它只是创建一个数组,该数组的每个元素都将null
从头开始.
但是,基本答案是"是" - 如果你没有其他任何东西都有对数组的引用,并且其他任何东西都没有引用Bird
你可能在其他地方创建的任何对象,那么垃圾收集器将处理它们.你几乎肯定不应该写任何一种"删除"方法.
你可能不需要你的myTree = null;
语句......如果它是一个超出范围的局部变量,或者一个对象中的实例变量无论如何都有资格进行垃圾收集,那么它就没有意义了.
相对较新的Java程序员可能需要一段时间才能学会信任垃圾收集器,并放开控制......但是一旦你这样做,你的代码就会简单得多:)
归档时间: |
|
查看次数: |
85 次 |
最近记录: |