当前位置:  技术问答>java相关

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

    来源: 互联网  发布时间:2015-03-15

    本文导语:  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.ju...

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;//这行在这里起什么作用????

|
我认为选c,也就是oa[0]=null;之后。
对于垃圾回收,可以用引用计数来理解(当然我不敢肯定java中就是这样实现的,猜想而已)
1.当object o =new float (3.14F);创建了对象时,该对象只有一个引用,即o
  此时reference count=1;

2.oa[0]=o;//reference count=2;

3.o=null;//reference count=1;

4.oa[0]=null;//reference count=0; eligible for garbage collection








|
return o;//这行什么作用都不起
因为oa[0]一直引用这个Float对象,所以要等到这个方法结束后才能回收这个Float 对象

|
c

|
c

|
我认为是C

|
c

|
C
oa[0]=null后在对象上面已经没有任何引用了,垃圾收集器已经可以回收内存了。

return o;此时的o引用的是null,跟第四句创建的对象没有一点关系。

|
c:
oa[0]=o;
o=null;
oa[0]=null;
这三行执行完后,已经没有指针指向第四行创建的Float对象,它可以被回收了。

|
c

|
c,我认为当一个object没有object reference时,即可garbage collection

|
答案是C。
to forest:
 GC并非是引用技术的。

但是GC的条件除了察看没有Object Reference之外,还要看看有没有Finalize函数。(当然在Sun Class JVM实现中,是把有Finalize函数的对象放在另一个队列中的)

|
我认为选c
因为执行完第8行后对象o就没有“引用”指向它,当然就要被回收。

|
晕倒~~~~~~~~~~
我个人认为是C,不过到底答案是哪个啊?

|
我坚持认为选c。
to chl326:
 你觉得当object o =new float (3.14F);创建了对象时,该对象只有一个引用,即o
这句话的问题在哪呢?

to congling:
 有没有Finalize函数,gc会有何不同呢?望解释
 
 

|
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

|
当然应该是 c.just after line 8
只有在第八行之后才有可能回收。

|
c

|
to leo1026(老土) :
请不要光说风凉话好不好!!!--
"b,原因已经解释过.贴帖子的朋友,你可以去问高手,在这里java高手太少,连基本的原理都有人弄错." 
如果你能解释,请说出理由。

我坚持选C

|
同意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 请看清楚题目在作答,题目不是问什么时候回收,而是问什么时候该对象具备被回收的条件。

|
to jsyx()这两道题根本是两回事,少了o=null答案自然不同。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python类的构造函数,析构函数以及垃圾回收机制详细介绍及代码举例
  • CCNIC-垃圾-垃圾-垃圾
  • 用Linux发的邮件被当成垃圾邮件
  • ubuntu垃圾清理
  • 邮件反病毒和反垃圾网关 SAGATOR
  • 反垃圾邮件系统 SpamAssassin
  • 防垃圾留言插件 Akismet
  • WordPress反垃圾插件 Defensio Anti-Spam
  • 发垃圾邮件系统 SpamCheck
  • 垃圾回收器 bdw-gc
  • WordPress防垃圾留言插件 SpamBam
  • 垃圾信息过滤插件 stop-spam
  • 反垃圾留言插件 WP-Ban
  • linux会产生垃圾文件吗?
  • WP的反垃圾插件 WangGuard
  • 怎么用javamail彻底删除邮件。不是放到垃圾箱里。。
  • 关于垃圾回收的问题
  • 反垃圾邮件系统 milter manager
  • 反垃圾邮件系统 Rspamd
  • WordPress防垃圾留言插件 DNS-anti-spam
  • 垃圾邮件过滤 phPOP3clean


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    linux会产生垃圾文件吗? iis7站长之家