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:无法到达任何对象。
Now, both the objects are eligible for garbage collection as there is no way we can call them. This is popularly known as Island of Isolation.