垃圾收集器一题!??,,

chl326 2002-01-03 12:39:42
public class X
{
public object m() {
object o =new float (3.14F);
object [] oa =new object[1];
oa[0]=o;
o=null;
oa[0]=null;
return o;
}
}
when is the float object ,created in line 4,eligible for garbage collection?
a.just after line 6
b.just after line 7
c.just after line 8
d.just after line 9(that is,as the method returns)
我认为选d,但是我也不太明白,大家认为选那个》?
return o;//这行在这里起什么作用????
...全文
1006 56 打赏 收藏 转发到动态 举报
写回复
用AI写文章
56 条回复
切换为时间正序
请发表友善的回复…
发表回复
dtmark 2002-01-09
  • 打赏
  • 举报
回复
我现在明白了,应该选C,因为传递的是值,所以当第八句时,才把float (3.14F)开出的这块内存块释放。
明白了
elic 2002-01-07
  • 打赏
  • 举报
回复
c
leo1026 2002-01-07
  • 打赏
  • 举报
回复
对不起,是我错了cqing说得很对,我还是没有分析透。
还有forest(),不好意思。
可是我前面确实说了很多啊,你也没有象cqing那样找到问题的根源。
仅仅讨论,不是别的意思,希望做好朋友:)
jacklondon 2002-01-06
  • 打赏
  • 举报
回复
sun一直宣称java的内存回收比引用计数好,不过我在实际中发现,java内存回收不如vb,在网上对java内存回收骂声很多,等下一个版本java吧,可能会好一些。
jacklondon 2002-01-06
  • 打赏
  • 举报
回复
答案是d
java不是采用引用计数的,vb和com是采用引用计数
正确地说,这题没有答案,java的内存是在VJM觉得内存不太够用的时候,开始回收,并且这一个过程是不可控制的,发生时间带有一定的随机性,不同的VJM表现也不一样。
jsyx 2002-01-06
  • 打赏
  • 举报
回复
TO cqing:
我也说了这道题选C。没什么好讨论的。
但是sun的题库中,是我说的那种形式。不是这样
cqing 2002-01-06
  • 打赏
  • 举报
回复
to jsyx()这两道题根本是两回事,少了o=null答案自然不同。
cqing 2002-01-06
  • 打赏
  • 举报
回复
同意forest(),选c
to leo1026(老土), 这道题对Float (3.14f)的引用有两个地方:分别在第4行和第6行,也就是说第6行后,o 和 oa[0] 同时指向Float (3.14f),而第8行后才是真正没有任何变量指向Float (3.14f),该对象才够资格被回收。
1.public class X
2.{
3.public object m() {
4.object o =new Float (3.14f);
5.object [] oa =new object[1];
6.oa[0]=o;
7.o=null;
8.oa[0]=null;
9.return o;
10.}
11.}

to :Saint_Rol,jacklondon 请看清楚题目在作答,题目不是问什么时候回收,而是问什么时候该对象具备被回收的条件。
jsyx 2002-01-06
  • 打赏
  • 举报
回复
别争了,兄弟们。这道题我考了。原题大概是这样的(昨天才考完,不会记错)
public class X
{
public object m() {
object o =new float (3.14F);
object [] oa =new object[1];
oa[0]=o;
oa[0]=null;
return o;
}
}
when is the float object ,created in line 4,eligible for garbage collection?
a.just after line 6
b.just after line 7
c.just after line 8
d.just after line 9(that is,as the method returns)
应该选d。你这道题一定是抄错了。
当然如果,多了那一行,肯定是选C。
Patrick_DK 2002-01-06
  • 打赏
  • 举报
回复
同意楼上的,我等你的消息哦
chl326 2002-01-06
  • 打赏
  • 举报
回复

实在不行,明天给sun公司打个电话,问问怎么回事。。。
forest 2002-01-06
  • 打赏
  • 举报
回复
to leo1026(老土) :
请不要光说风凉话好不好!!!--
"b,原因已经解释过.贴帖子的朋友,你可以去问高手,在这里java高手太少,连基本的原理都有人弄错."
如果你能解释,请说出理由。

我坚持选C
KillAllError 2002-01-06
  • 打赏
  • 举报
回复
d is right
hushuo 2002-01-06
  • 打赏
  • 举报
回复
c
chl326 2002-01-06
  • 打赏
  • 举报
回复
最后答案为c
结账
Patrick_DK 2002-01-06
  • 打赏
  • 举报
回复
同意楼上两位,C
GFox 2002-01-06
  • 打赏
  • 举报
回复
当然应该是 c.just after line 8
只有在第八行之后才有可能回收。
hahaha88 2002-01-06
  • 打赏
  • 举报
回复
public class X
{
public object m() {
object o =new float (3.14F);
object [] oa =new object[1];
oa[0]=o;
o=null;
oa[0]=null;
return o;
}
}

第4行建立一个内存对象(X),并让o持有X的一个reference
第6行让oa[0]持有X的另一个reference
第7行去掉X的一个reference
第8行去掉X的另一个reference

到次为止,X失去了所有的reference,可以被回收了(eligible for GC),
eligible for GC是说X可以被回收了,并不是说一定回收(如果内存足够,
也可能永远都不回收)。

或许return o;另有奥秘?但结果应该是C/D,而不是B
hch_d 2002-01-06
  • 打赏
  • 举报
回复
争论中,关注中……
leo1026 2002-01-06
  • 打赏
  • 举报
回复
请注意,这里问题问得很明白,是什么时候可以被回收,而不是说一定会回收,所以有答案而且是b
加载更多回复(36)

62,614

社区成员

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

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