日期:2014-05-20  浏览次数:20639 次

垃圾回收问题
有如下问题,请大家解释一下,谢谢:
Java code

interface Animal{
    void makeNoise();
}
class Horse implements Animal{
    Long weight=1200L;
    public void makeNoise(){
        System.out.println("vinny");
    }
}
public class lcelandic  extends Horse{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        lcelandic i1=new lcelandic();
        lcelandic i2=new lcelandic();
        lcelandic i3=new lcelandic();
        i3=i1;i1=i2;i2=null;i3=i1;
        
    }
}




问:When line 14(也就是 i3=i1;i1=i2;i2=null;i3=i1;)is reached ,how many objects are eligible for the garbage collector?
答案是2个,但我不知道为什么,请高手解答一下

------解决方案--------------------
设i1 i2 i3代表的内存区域分别为A B C
i3=i1; //i3 i1均引用A C没有被引用
i1=i2; // i1 和i2均引用B 
i2=null; // i1指向B 
i3=i1; //i3和i1均引用B A没被引用
A和C会被收集