在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
扫描二维码添加微信 
  • ,每次淘宝领取淘宝优惠券,淘宝购物更优惠。现在添加微信,还可以领取机械键盘50元优惠券!添加微信后回复机械键盘即可领取!
    支持我们,就用微信淘宝!