• Tags
  •         
  • www.breakyizhan.com
  •    

    在java中,垃圾收集器模块负责对象销毁,并且没有任何引用的对象可以进行垃圾收集。垃圾收集器能够识别此类对象。

    Java中隔离岛:

    • 对象1引用对象2和对象2引用对象1.对象1和对象2都不被任何其他对象引用。那是一个孤立的岛屿Island of Isolation。
    • 基本上,隔离岛Island of Isolation是一组相互引用的对象,但它们不会被应用程序中的任何活动对象引用。严格来说,即使是一个未引用的对象也是一个孤立的岛屿。

    例:

    public class Test
    {
        Test i;
        public static void main(String[] args)  
        {
            Test t1 = new Test();
            Test t2 = new Test();
             
            // Object of t1 gets a copy of t2
            t1.i = t2;
         
            // Object of t2 gets a copy of t1
            t2.i = t1;
             
            // Till now no object eligible
            // for garbage collection 
            t1 = null;
            
            //now two objects are eligible for
            // garbage collection 
            t2 = null;
            
            // calling garbage collector
            System.gc();
           
        }
    
        @Override
        protected void finalize() throws Throwable 
        { 
            System.out.println("Finalize method called"); 
        }
    }
    

    输出:

    Finalize method called
    Finalize method called

    说明:
    在销毁对象之前,垃圾收集器最多一次在该对象上调用finalize方法。
    在上面的例子中,finalize方法调用两次的原因是因为两个对象有资格进行垃圾收集。这是因为我们在执行后没有对t1和t2对象的任何外部引用t2=null
    我们所拥有的只是彼此之间的内部引用(在类Test的实例变量i中)。我们无法调用两个对象的实例变量。因此,不能再次调用任何对象。

    直到t2.i = t1:两个对象都有外部引用t1和t2。
    Java中的隔离岛Island of Isolation


    t1 = null:两个对象分别可以通过t2.i和t2到达。
    Java中的隔离岛Island of Isolation

    t2 = null:无法访问任何对象。
    Java中的隔离岛Island of Isolation

    现在,这两个对象都有资格进行垃圾收集,因为我们无法调用它们。这通常被称为隔离岛。

     
    转载请保留页面地址:https://www.breakyizhan.com/java/4993.html