作者mserway (mserway)
看板java
标题[问题] 关於 Garbage Collection
时间Mon Oct 24 14:36:20 2011
大家好。
询问的是当程式执行到 第 18 行,有多少个物件有资格被资源回收(GC)。
3. class Beta {}
4. class Alpha {
5. static Beta b1;
6. Beta b2;
7. }
8. public class Tester {
9. public static void main(String [] args) {
10. Beta b1 = new Beta();
11. Beta b2 = new Beta();
12. Alpha a1 = new Alpha();
13. Alpha a2 = new Alpha();
14. a1.b1 = b1;
15. a1.b2 = b1;
16. a2.b2 = b2;
17. a1 = null; b1 = null; b2 = null;
18. // do stuff
19. }
20. }
此题为 "SCJP 6 专业认证手册" 的题目,第284页 第11题
解答为 "只有一个物件" 有资格被资源回收。
解释如下3点 :
1) a2 有指涉到一个物件;
2) a2.b2有指涉到一个物件;
3) 仍然可能透过 a2.b1 这个静态变数来存取另一个 Beta 物件。
我的问题是 : 哪个物件有资格被资源回收? a1 或是 b1 指涉的物件?
b1 原先指涉的 Beta 物件可否被 a1.b1 (静态变数)存取?
觉得自己在这部分上有盲点,希望有兴趣的朋友可以给予一点帮助~ 谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.113.154