垃圾收集的"隔离岛"

Ton*_*ony 49 java garbage-collection

任何人都可以解释垃圾收集隔离岛的概念吗?

Tam*_*ege 50

对象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;
Run Code Online (Sandbox Code Playgroud)

  • @ user962206不,他的意思是'A级{B myB; B组{A myA; }/*以后*/A a =新A(); B b = new B(); ab = b; ba = a;`如果你能解读那个......但是说实话,这就足够了'A级{B myB; } class B {} B b = new B(); A =新A(); ab = b;` (5认同)
  • 代码应该是这样的:`A a = new A(); B b = 新 B(); a.myB = b; b.myA = a;`如果我错了,请纠正我。 (2认同)

sch*_*der 10

这是对这个术语的一个很好的解释.摘抄:

  • "如果一个对象obj1被垃圾收集,但是另一个对象obj2包含对它的引用,那么obj2也有资格进行垃圾收集"
  • "如果对象obj2可以访问符合垃圾收集条件的对象obj1,那么obj2也有资格进行垃圾收集"

这被称为"隔离岛"."隔离岛"描述了一个或多个对象没有从应用程序的活动部分引用它们.


Lei*_*igh 9

需要记住的是,只有直接或间接地从GC根对象(线程,当前局部变量,静态变量等)引用对象时才会收集对象.如果两个(或更多)对象相互引用但未从根引用,则它们可以进行垃圾回收.