2013-04-25 24 views
1

您能解释一下这个答案吗?正如我预期的答案C有多少个物品可以使用gc

Given: 
11. class Snoochy { 
12. Boochy booch; 
13. public Snoochy() { booch = new Boochy(this); } 
14. } 
15. 
16. class Boochy { 
17. Snoochy snooch; 
18. public Boochy(Snoochy s) { snooch = s; } 
19. } 
And the statements: 
21. public static void main(String[] args) { 
22. Snoochy snoog = new Snoochy(); 
23. snoog = null; 
24. // more code here 
25. } 

哪些声明对于第23行执行后立即引用的snoog,snooch和booch的对象是正确的?

A. None of these objects are eligible for garbage collection. 
    B. Only the object referenced by booch is eligible for garbage collection. 
    C. Only the object referenced by snoog is eligible for garbage collection. 
    D. Only the object referenced by snooch is eligible for garbage collection. 
    E. The objects referenced by snooch and booch are eligible for garbage collection. 

Answer: E 
+0

闻起来像编码竞争:) – 2013-04-25 06:34:10

+3

什么是停止'booch'被收集?我期望E. – 2013-04-25 06:35:49

+0

你说答案是'C',但你发布的问题说答案是'E'。 – SudoRahul 2013-04-25 06:36:32

回答

3

这两个类互相引用。所以,当创建snoog时,您还会得到一个boochsnooch。当您设置snoog = null;时,boochsnooch有资格使用GC

0

在第23行之后,没有引用指向第22行创建的Snoochy实例。 =>此实例可以被垃圾收集。 但是这个实例包含对其中没有其他参考文献存在的Boochy(参见第13行)的引用。 =:这也可以垃圾收集。

+0

谢谢球员为您的回应...得到了点:) – Tez 2013-04-25 08:22:13

相关问题