📜  Java中的孤立岛

📅  最后修改于: 2022-05-13 01:55:25.347000             🧑  作者: Mango

Java中的孤立岛

在Java中,对象销毁由垃圾收集器模块负责,没有任何引用的对象有资格进行垃圾收集。垃圾收集器能够识别这种类型的对象。现在让我们来讨论一下孤立岛的确切含义如下:

  • 对象 1 引用对象 2,对象 2 引用对象 1。对象 1 和对象 2 均未被任何其他对象引用。那是一个与世隔绝的孤岛。
  • 基本上,隔离岛是一组相互引用但不被应用程序中任何活动对象引用的对象。严格来说,即使是单个未引用的对象也是一个孤立的孤岛。

例子:

Java
// Java Program to Illustrate Island of Isolation
 
// Main class
public class GFG {
 
    GFG i;
 
    // Method 1
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating object of class inside main() method
        GFG t1 = new GFG();
        GFG t2 = new GFG();
 
        // 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();
    }
 
    // Method 2
    // overriding finalize() Method
    @Override protected void finalize() throws Throwable
    {
        // Print statement
        System.out.println("Finalize method called");
    }
}


输出:

输出说明:

  • 在销毁一个对象之前,垃圾收集器最多对该对象调用一次 finalize 方法。这是因为在上面的示例中,finalize() 方法被调用了两次,因为两个对象都符合垃圾回收的条件。这是因为在执行 t2=null 之后,我们没有对 t1 和 t2 对象的任何外部引用。
  • 我们所拥有的只是彼此的内部引用(在类 Test 的实例变量 i 中)。我们无法调用两个对象的实例变量。因此,在' t2.i = t1 '之前,不能再次调用任何对象

  • 这两个对象都有外部引用 t1 和 t2。
  • t1 = null :这两个对象都可以分别通过 t2.i 和 t2 到达。
  • t2 = null:无法到达任何对象。