sin*_*inθ 2 java garbage-collection memory-management
所以我们说有两个类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后第三个类创建一个新A对象.然后,当它想要骑它时,它将指针设置为null.不会有由A和B引起的一些奇怪的持续循环,因为它们都互相引用吗?两者都不能被收集,因为它们让对方"活着".或者JVM是否太聪明,并意识到程序的其余部分不知道它们?
感觉这可能会导致某种内存泄漏.
如果可以,你如何解决?双向引用在代码中非常常见.在对象1知道对象2并且对象2知道对象1的情况下,有很多情况.如何确保它们被删除.
注意:我在我的网络浏览器中写了所有这些,所以原谅任何错误
如果仅对 A 和 B 的引用是 A 和 B 本身,则它们有资格进行垃圾收集。
如果无法通过从垃圾收集根开始的链访问对象,Java 的 GC 会认为对象有资格进行垃圾收集。即使对象可能相互指向以形成一个循环,但如果从根上切断它们,它们仍然是垃圾。