【发布时间】:2013-06-04 22:04:37
【问题描述】:
假设有两个类:
public class A {
B reference = new B(this) //B isn't garbage collected because A references it
}
public class B {
A reference // A isn't garbage collected because B references it
public B(A ref) {
reference = ref;
}
}
然后第三个类创建一个新的A 对象。然后,当它想摆脱它时,它将指针设置为null。不会因为 A 和 B 都相互引用而导致一些奇怪的持久循环吗?两者都不能被收集,因为它们让彼此“活着”。还是 JVM 太聪明了,意识到程序的其余部分不知道它们?
感觉这可能会导致某种内存泄漏。
如果可能,您将如何解决?双向引用在代码中很常见。在很多情况下,对象 1 知道对象 2,对象 2 知道对象 1。如何确保它们被删除。
注意:我在我的网络浏览器中写了所有这些,所以请原谅任何错误
【问题讨论】:
-
Java 中的 GC 足够聪明,可以收集孤立对象的孤岛。
标签: java memory-management garbage-collection