对于此代码片段:
Vector v = new Vector(10);
for (int i = 1; i<100; i++)
{Object o = new Object();
v.add(o);
o = null;
}
不会发生泄漏,因为这100个对象的引用都已设置为null,因此它们将被GC收集。
但是,
Vector v = new Vector(10);
for (int i = 1; i<100; i++)
{Object o = new Object();
v.add(o);
}
v= null;
会有泄漏,因为我只清空了对 vector 的引用,但是对100个对象的所有引用仍然保留,因此不会被GC收集,因为它们对系统没有用处。
请帮忙检查一下我对Java内存泄漏的理解是否正确,先谢谢了!
最佳答案
在第一个示例中,v
仍然保留对 100 个对象的引用。
当 v
超出范围时,它将成为垃圾回收的候选者,当它被回收时,所有 100 个对象也可以被回收。
在第二个示例中 - 当您将 v
设置为 null 时,它将成为垃圾收集的候选者,当它被收集时,所有 100 个对象也可以被收集。
因此,在这两种情况下都不应该有任何泄漏。
一般情况下,没有必要将局部变量设置为 null,当方法结束时,它将超出范围并被 GC 处理。
关于java - 我是否正确理解 Java 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15862302/