有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (4) 个答案

  1. # 1 楼答案

    对象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;
    
  2. # 2 楼答案

    这是这个术语的good explanation。摘录:

    • "If an object obj1 is garbage collected, but another object obj2 contains a reference to it, then obj2 is also eligible for garbage collection"
    • "If object obj2 can access object obj1 that is eligible for garbage collection, then obj2 is also eligible for garbage collection"

    This is called "Island of Isolation". An "island of isolation" describes one or more objects have NO references to them from active parts of an application.

  3. # 3 楼答案

    事实上,如果您理解垃圾收集的标记和清除的概念,您也会更好地理解隔离岛:

    • 该算法从GC根开始:主线程、主方法中的局部变量、主类的静态变量
    • 该算法遍历所有对象引用,从GC根开始,并将找到的每个对象标记为活动对象
    • 所有未被标记对象占用的堆内存都将被回收。它只是标记为自由,基本上没有未使用的对象
    • 如果两个或多个对象相互参照,但它们没有被与任何根链接的对象参照,则它们处于隔离岛中,并且也被扫掠
  4. # 4 楼答案

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