当前位置: 技术问答>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;//这行在这里起什么作用????
{
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
对于垃圾回收,可以用引用计数来理解(当然我不敢肯定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 对象
因为oa[0]一直引用这个Float对象,所以要等到这个方法结束后才能回收这个Float 对象
|
c
|
c
|
我认为是C
|
c
|
C
oa[0]=null后在对象上面已经没有任何引用了,垃圾收集器已经可以回收内存了。
return o;此时的o引用的是null,跟第四句创建的对象没有一点关系。
oa[0]=null后在对象上面已经没有任何引用了,垃圾收集器已经可以回收内存了。
return o;此时的o引用的是null,跟第四句创建的对象没有一点关系。
|
c:
oa[0]=o;
o=null;
oa[0]=null;
这三行执行完后,已经没有指针指向第四行创建的Float对象,它可以被回收了。
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函数的对象放在另一个队列中的)
to forest:
GC并非是引用技术的。
但是GC的条件除了察看没有Object Reference之外,还要看看有没有Finalize函数。(当然在Sun Class JVM实现中,是把有Finalize函数的对象放在另一个队列中的)
|
我认为选c
因为执行完第8行后对象o就没有“引用”指向它,当然就要被回收。
因为执行完第8行后对象o就没有“引用”指向它,当然就要被回收。
|
晕倒~~~~~~~~~~
我个人认为是C,不过到底答案是哪个啊?
我个人认为是C,不过到底答案是哪个啊?
|
我坚持认为选c。
to chl326:
你觉得当object o =new float (3.14F);创建了对象时,该对象只有一个引用,即o
这句话的问题在哪呢?
to congling:
有没有Finalize函数,gc会有何不同呢?望解释
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
{
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
请不要光说风凉话好不好!!!--
"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 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答案自然不同。