Jav*_*yer 2 java garbage-collection scjp
这个问题就像是我以前的一个 假设:
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 Icelandic extends Horse {
9. public void makeNoise() { System.out.println("vinny"); }
10. public static void main(String[] args) {
11. Icelandic i1 = new Icelandic();
12. Icelandic i2 = new Icelandic();
13. Icelandic i3 = new Icelandic();
14. i3 = i1; i1 = i2; i2 = null; i3 = i1;
15. }
16. }
Run Code Online (Sandbox Code Playgroud)
到达第14行时,有多少对象符合垃圾收集器的条件?
A. 0
B. 1
C. 2
D. 3
E. 4
F. 6
我选择了A,但正确答案是E,但我不知道为什么?
让我们把三个Icelandic创建中的对象main为A,B和C.
Initialy
i1=A,i2=B和i3=C;后 i3 = i1
i1=A,i2=B和i3=A;后 i1 = i2
i1=B,i2=B和i3=A;之后i2 = null:
i1=B,i2=null和i3=A;后 i3 = i1
i1=B,i2=null和i3=B在第14行中,只有B类型对象的常设引用Icelandic.A并且C在正在运行的程序中丢失了.
Icelandic丢失的每个对象都会为垃圾收集器提供两个要收集的对象,即.所述Icelandic对象本身和Long内的每个对象Icelandic,这使垃圾收集的对象的总数4.
由于makeNoise从不调用方法,因此它们不会改变结果.
| 归档时间: |
|
| 查看次数: |
4333 次 |
| 最近记录: |