有人可以解释垃圾收集隔离岛的概念吗?
答案 0 :(得分:44)
对象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;
答案 1 :(得分:10)
这是这个词的good explanation。摘录:
- “如果对象obj1是垃圾收集,而另一个对象是obj2 包含对它的引用,然后是obj2 也有资格获得垃圾 集“
- “如果对象obj2可以访问符合垃圾条件的对象obj1 收集,然后obj2也符合条件 垃圾收集“
这被称为“隔离岛”。 一个“隔离岛”描述了一个 或更多对象没有引用 他们来自一个活跃的部分 应用
答案 2 :(得分:9)
要记住的是,只有直接或间接地从 GC根对象(线程,当前局部变量,静态变量等)引用对象时才会收集对象。如果两个(或更多)对象相互引用但未从根引用,则它们可以进行垃圾回收。
答案 3 :(得分:3)
事实上,如果你理解Mark和Sweep of Garbage Collection的概念,你也会理解更好的隔离岛: