请问有人可以解释一下垃圾回收的孤岛概念吗?
对象A引用对象B。对象B引用对象A。对象A和对象B都没有被任何其他对象引用,这就是孤立的岛。
简而言之,孤立的岛是一组对象彼此引用,但在应用程序中没有任何活动对象引用它们。严格来说,即使是单个未被引用的对象也是孤立的岛。
评论编辑:
class A {
B myB;
}
class B {
A myA;
}
/* later */
A a = new A();
B b = new B();
a.b = b;
b.a = a;
以下是一个好的解释这个术语。摘录:
- “如果一个对象obj1被垃圾回收,但另一个对象obj2包含对它的引用,则obj2也有资格进行垃圾回收”
- “如果对象obj2可以访问有资格进行垃圾回收的对象obj1,则obj2也有资格进行垃圾回收”
这被称为“孤立岛”。 “孤立岛”描述了一个或多个对象在应用程序的活动部分中没有对它们的引用。
事实上,如果你了解垃圾收集中的标记和清除(Mark and Sweep)的概念,你将更好地理解孤岛对象(Island of Isolation):
class A { B myB; } class B { A myA; } /* later */ A a = new A(); B b = new B(); a.b = b; b.a = a;
如果您能理解这个...但说实话,只需要这样就足够了:class A { B myB; } class B { } B b = new B(); A a = new A(); a.b = b;
- corsiKaA a = new A(); B b = new B(); a.myB = b; b.myA = a;
如果我错了,请纠正我。 - Akshay