垃圾回收的一个题目:
Given:
3. interface Animal{void makeNoise();}
4. class Horse implements Animal{
5. Long weight = 1200L;
6. public void makeNoise(){System.out.println("whinny");}
7. }
8. public class lcelandic extends Horse{
9. public void makeNoise(){System.out.println("vinny");}
10. public static void main(String[] args) {
11. Icelandic i1 = new lcelandic();
12. Icelandic i2 = new lcelandic();
13. Icelandic i3 = new lcelandic();
14. i3 = i1; i1 = i2; i2 = null; i3 = i1;
15. }
16. }
当程序到达14行时,有多少个符合垃圾回收的条件?

解决方案 »

  1.   

    i3=i1,那么i1,i3指向一个,i2指向一个,回收一个
    i1=i2不回收
    i2=null不回收
    i3=i1;回收一个所以总共回收了2个,个人看法
      

  2.   

    java回收有局部回收、全局回收,14行运行完成后,虚拟机都推出了,肯定全部兑现都要回收。大型系统中垃圾回收会影响较大,可以通过设置jvm参数优化,像楼主写的这种,普通的测试程序,意义不大。
      

  3.   

    如果程序运行到14行,但还没有运行到15,那么此时垃圾为1个
    因为new了3个对象,i3 = i1; i1 = i2; i2 = null; i3 = i1;
    最后只有i3没有被指向,所以它是垃圾对象。
      

  4.   

    楼上,原本的i1呢,最后一个i3=i1, 因为第二句i1=i2,所以最后一句实际上是i3指向了i2,这样的化 原本的对象i1和i3不都没有引用指向了吗?
      

  5.   

    垃圾回收的一个题目: 
    Given: 3. interface Animal{void makeNoise();} 
    4. class Horse implements Animal{ 
    5. Long weight = 1200L; 
    6. public void makeNoise(){System.out.println("whinny");} 
    7. } 
    8. public class lcelandic extends Horse{ 
    9. public void makeNoise(){System.out.println("vinny");} 
    10. public static void main(String[] args) { 
    11. Icelandic i1 = new lcelandic(); //大家重点考虑一下这个对象回收了没有
    12. Icelandic i2 = new lcelandic(); 
    13. Icelandic i3 = new lcelandic(); 
    14. i3 = i1; i1 = i2; i2 = null; i3 = i1; 
    15. } 
    16. } 当程序到达14行时,有多少个符合垃圾回收的条件? 我将代码编辑了一下,大家好看。