关于垃圾回收

charles_wang8888 2008-10-09 09:39:44
上次我不知道看谁帖子的,还是和谁讨论的,说垃圾回收是的候选时刻是刚好没有引用指向堆中的此对象时候,但是用这个规律套这道题目好像不怎么正确?谁帮忙解释下?

Question 209
Given:
11. public void genNumbers() {
12. ArrayList numbers = new ArrayList();
13. for (int i=0; i<10; i++) {
14. int value = i * ((int) Math.random());
15. Integer intObj = new Integer(value);
16. numbers.add(intObj);
17. }
18. System.out.println(numbers);
19. }
Which line of code marks the earliest point that an object referenced
by intObj becomes a candidate for garbage collection?
A. Line 16
B. Line 17
C. Line 18
D. Line 19
E. The object is NOT a candidate for garbage collection.
Answer:D

我感觉,既然intObj是个循环体中定义的局部引用,那么它的生命期应该旨在循环体中有效吧,那么应该选择B阿,为什么选择D呢?
...全文
115 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
charles_wang8888 2008-10-09
  • 打赏
  • 举报
回复
我发现SCJP模拟题有点恶心的说,我花了2天时间自己把他们全部做完了,一共224题,虽说比较差,错了27题,不过至少有10题是由于对于题干或者题枝的理解不明确造成的,这些老外用词根本就不符合习惯阿,比如情态副词,may not,我们都是翻译成可能不,但是他却翻译成不可能。另外,强力批判下TestKiller的质量,非常差,很多错误,比如not写成hot,而且还有错误答案,比如第193题。 希望学习JAVA基础拿这个做基础测试的朋友注意下。。嘿嘿
charles_wang8888 2008-10-09
  • 打赏
  • 举报
回复
哦,正确,,我吧题目理解错了。。OMG
ZangXT 2008-10-09
  • 打赏
  • 举报
回复
ArrayList会持有对象的引用.
huoyin 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 charles_wang8888 的回复:]
引用 5 楼 ma_liang 的回复:
intObj通过这个语句numbers.add(intObj);添加到numbers里,只有numbers的状态编程可回收时,intOjb才编程可回收,所以在line 19的时候intOjb才变成可回收的。



可是看代码,intObj状态并不依赖numbers阿。 每次循环体结束,则intObj的使命也就完成了阿,因为他是个局部变量,所以此时就没任何引用指向这个intObj了,难道不是这个时候将其标记为可回收状态么?
[/Quote]

Which line of code marks the earliest point that an object referenced
by intObj becomes a candidate for garbage collection?
题目问得是这个对象,而不是该对象的应用,对象的引用intObj确实是在17行结束后生命周期就完了,但是intObj指的对象还在被numbers引用。
charles_wang8888 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ma_liang 的回复:]
intObj通过这个语句numbers.add(intObj);添加到numbers里,只有numbers的状态编程可回收时,intOjb才编程可回收,所以在line 19的时候intOjb才变成可回收的。
[/Quote]


可是看代码,intObj状态并不依赖numbers阿。 每次循环体结束,则intObj的使命也就完成了阿,因为他是个局部变量,所以此时就没任何引用指向这个intObj了,难道不是这个时候将其标记为可回收状态么?
charles_wang8888 2008-10-09
  • 打赏
  • 举报
回复
还是没有明白。。。。55555,谁能详细点
ma_liang 2008-10-09
  • 打赏
  • 举报
回复
intObj通过这个语句numbers.add(intObj);添加到numbers里,只有numbers的状态编程可回收时,intOjb才编程可回收,所以在line 19的时候intOjb才变成可回收的。
huoyin 2008-10-09
  • 打赏
  • 举报
回复
因为这一句numbers.add(intObj); 还有个引用指向intObj,numbers这是在19行才被标为可以回收的,所以intObj对象只有到numbers对象生命周期结束后才能被标记。答案是D,没有问题。
sweetBug 2008-10-09
  • 打赏
  • 举报
回复
晕啊,感觉看英文很晕啊..
ZHANGBINFLY 2008-10-09
  • 打赏
  • 举报
回复
学习,不清楚,是不是intObj是个指向对象的地址变量
charles_wang8888 2008-10-09
  • 打赏
  • 举报
回复
PS ,本题不是问的什么时候开始回收:是问的什么时候为垃圾回收候选者的起始点,请针对题目回答。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧