关于Java垃圾回收器的一个问题:3、让相互联系的对象称为“岛”对象 Person p1 = new Person("aaa"); 
Person p2 = new Person("bbb"); 
Person p3 = new Person("ccc"); 
p1=p2; p2=p3; p3=p1; 
p1=null; p2=null; p3=null; 
在没有对p1、p2、p3置null之前,它们之间是一种三角恋关系。分别置null,三角恋关系依然存在,但是三个变量不在使用它们了。三个Person对象就组成了一个孤岛,最后死在堆上——被垃圾回收掉。 但是我觉得:
我觉得的三角恋关系是错误的, p1=p2; p2=p3; p3=p1; 之后根本没有形成三角恋关系,
因为此时 p1 = p3 = new Person("bbb");
p2 = new Person("ccc");
这里根本没有 new Person("aaa")的事情, 你自己运行一遍这个例子就知道了, 
当p1=p2; p2=p3; p3=p1; 这句代码结束后, new Person("aaa")就已经被GC回收了 —— HoldBelief

解决方案 »

  1.   

    new Person("aaa")就已经被GC回收 对这句补充:
    可能被回收。因为你不知道垃圾收集器何时工作。它可能工作肯能现在还没有工作。
    即使调用gc();它也不一定马上工作。
    这还要看资源的使用情况。
      

  2.   

    我的意思是正好正好在此时GC工作了呢, 不必等到 p1=null; p2=null; p3=null; 之后再去回收 new Person("aaa") 
      

  3.   

      gc 是new 的时候为这个对象分配空间,gc回收是当内存不够用了,才会回收的。一般回收某个对象的时候,是当这个对象不再使用了才会回收。
       我是看了think in java 后,有如上的理解。 
      

  4.   

    对的,不必等到赋null值;只要没有引用指向就可能被回收