-3

有人可以告诉我垃圾收集是如何使用这个例子工作的。问题是在程序的指定点有多少对象有资格进行垃圾回收。

interface Animal {
void makeNoise();
}

class Horse implements Animal {
    Long weight = 1200L;
    public void makeNoise() {

        System.out.println("whinny");
   }
}

public class Icelandic extends Horse {
    public void makeNoise() {
        System.out.println("vinny");
    }

    public static void main(String[] args) {
        Icelandic i1 = new Icelandic();
        Icelandic i2 = new Icelandic();
        Icelandic i3 = new Icelandic();
        i3 = i1;
        i1 = i2;
        i2 = null;
        i3 = i1;
//**here**
    }
}
4

2 回答 2

2
  • 当对象无法访问时,它们就有资格进行垃圾收集。它们的可达性在以下链接中进行了说明。

您可以尝试链接以了解对象如何有资格进行垃圾收集,并开始为您自己绘制图表。如果您遇到问题,请告诉我们。

于 2013-08-02T12:50:57.737 回答
1

刚刚从您的代码中获取它。只要按照代码,你会很好。

        Icelandic i1 = new Icelandic();  // i1 = firstObject --> Location XXXX
        Icelandic i2 = new Icelandic();  // i2 = secondObject --> Location YYYY
        Icelandic i3 = new Icelandic();  // i3 = thirdObject  ---> Location ZZZZ

        i3 = i1;
        // HERE i3 = i1; i3 --> XXXX; i1 --> XXXX; i2 --> YYYY  
        (ZZZZ No reference)

         i1 = i2;
        // Here i1 --> YYYY; i2 --> YYYY; i3 --> XXXX

        i2 = null;
        // Here i2 --> null; i1-->YYYY; i3 --> XXXX

        i3 = i1;
        // Here i1-->YYYY; i2 --> NULL; i3--> YYYY 
       (No reference for XXXX and ZZZZ)

希望这可以帮助。

注意,Long weight也是一个 Object。所以总共有4 个对象符合 GC 条件。 让我知道它是否有帮助。

于 2013-08-02T12:57:43.503 回答