use*_*692 6 java garbage-collection ocpjp
我正在准备OCPJP,我被困在以下模拟考试问题:
鉴于:
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();
12. Icelandic i3 = new Icelandic();
13. i3 = i1; i1 = i2; i2 = null; i3 = i1;
14. }
15. }
Run Code Online (Sandbox Code Playgroud)
到达第14行时,有多少对象符合垃圾收集器的条件?
A. 0
B. 1
C. 2
D. 3
E. 4
F. 6
他们的正确答案是E,即四个物体,但我不确定为什么.从我的角度来看,i2及其重量将有资格进行垃圾收集.也许我错过了什么,请指教.
让我们来看看Icelandic()第11行IceA,第12行IceB,等等.
创作之后
i1 = IceA
i2 = IceB
i3 = IceC
Run Code Online (Sandbox Code Playgroud)
后 i3 = i1
i1 = IceA
i2 = IceB
i3 = IceA
Run Code Online (Sandbox Code Playgroud)
后 i1 = i2
i1 = IceB
i2 = IceB
i3 = IceA
Run Code Online (Sandbox Code Playgroud)
后 i2 = null
i1 = IceB
i2 = null
i3 = IceA
Run Code Online (Sandbox Code Playgroud)
后 i3 = i1
i1 = IceB
i2 = null
i3 = IceB
Run Code Online (Sandbox Code Playgroud)
所以只剩Icelandic()下第12行创建的.现在,每次Icelandic()有一个Long weight,所以IceA和IceC现在未引用,这意味着4个对象(IceA,IceA.weight,IceC,IceC.weight)可用于GC.
args仍然是args,他们不计算这个问题超出范围Long weight没有静态声明,因此该类的每个实例都有一个weight对象.| 归档时间: |
|
| 查看次数: |
1807 次 |
| 最近记录: |