请教一道SCJP的题目,关于垃圾回收的,请各位前辈多多指教

时间:2021-03-21 00:01:58
Given:
3. interface Animal{void makeNoise();}
4. class Horse implements Animal{
5. Long weight = 1200L;
6. public void makeNoise(){System.out.println("whinny");}
7. }
8. public class lcelandic extends Horse{
9. public void makeNoise(){System.out.println("vinny");}
10. public static void main(String[] args) {
11. Icelandic i1 = new lcelandic();
12. Icelandic i2 = new lcelandic();
13. Icelandic i3 = new lcelandic();
14. i3 = i1; i1 = i2; i2 = null; i3 = i1;
15. }
16. }
When line 14 is reached, how many objects are eligible for the garbage collector?
A. 0
B. 1
C. 2
D. 3
E. 4
F. 6

答案是 C

可小弟我认为是E,理由是除了2个lcelandic需回收外,2个lcelandic中继承到的Long weight需要要回收,故应该4个呀
请各位老师指导!

16 个解决方案

#1


自己顶一下

#2


各位老师帮忙看看呀

#3


请教一道SCJP的题目,关于垃圾回收的,请各位前辈多多指教
大家都吃饭去啦?

#4


SCJP这么变态?

#5


你的想法实际没错,也可以这么去争辩,但是有点想的太多了。 当回收一个对象时,其下的所有实例都要被回收,2个Icelandic中的Long是指定要被回收的。但真正要考你的是Iclandic 1和3要被回收,所以是2个。

题目出的也有问题,不够严谨。这不会是官方正试的题吧???还是练习题?练习题可能不够严谨还能说的过去。要是正式题也这么出,这道题应该review一下了。。呵呵

#6


引用 5 楼 cgaolei 的回复:
你的想法实际没错,也可以这么去争辩,但是有点想的太多了。 当回收一个对象时,其下的所有实例都要被回收,2个Icelandic中的Long是指定要被回收的。但真正要考你的是Iclandic 1和3要被回收,所以是2个。 
  
 题目出的也有问题,不够严谨。这不会是官方正试的题吧???还是练习题?练习题可能不够严谨还能说的过去。要是正式题也这么出,这道题应该review一下了。。呵呵


是练习题,估计是和您说的一样,但愿考试别遇到这种模棱两可的题目吧 请教一道SCJP的题目,关于垃圾回收的,请各位前辈多多指教

#7


i3 = i1; ---------- i3指向的对象没有被引用                      
                      i3指向了i1所执行的对象

i1 = i2; ----------i1指向了i2所指向的对象

i2 = null;---------i2没有指向任何对象 


i3 = i1; ----------此时i1执行了指向的i2开始指向的对象
                      i3此时也指向了i2开始指向的对象
                       i1开始执行的对象没有被引用
综上所述:
有资格被回收的对象是i1、i3指向的对象!

#8


引用 6 楼 xlmaxlma 的回复:
引用 5 楼 cgaolei 的回复:
你的想法实际没错,也可以这么去争辩,但是有点想的太多了。 当回收一个对象时,其下的所有实例都要被回收,2个Icelandic中的Long是指定要被回收的。但真正要考你的是Iclandic 1和3要被回收,所以是2个。

题目出的也有问题,不够严谨。这不会是官方正试的题吧???还是练习题?练习题可能不够严谨还能说的过去。要是正式题也这么出,这道题应该review一下了。。呵呵


是练习题,估计是和您说…


正式考题都是很严谨的,像这类题都只会有唯一的答案,你可以放心。正式题都是一遍遍筛出来的。。

#9


再支持你一下。祝你考试顺利。

#10


如果是问你有多少个对象就打4个, 如果考你的是lcelandic就2个
Long weight = 1200L 可能改为long wight = 1200L;

#11


引用 7 楼 weiluo12 的回复:
i3 = i1; ----------i3指向的对象没有被引用                       
                       i3指向了i1所执行的对象 
  
 i1 = i2; ----------i1指向了i2所指向的对象 
  
 i2 = null;---------i2没有指向任何对象  
  
  
 i3 = i1; ----------此时i1执行了指向的i2开始指向的对象 
                       i3此时也指向了i2开始指向的对象 
                       i1开始执行的对象没有被引用 
 综上所述: 
 有资格被回收的…


对的,问题是此2个对象在heap中还建有2个Long对象,因为这里是Long,用的包装器;如果是long那又是另一回事了

问题是此时Long不会自动解包的呀,Long依旧还一个对象,所以我认为是4个对象,请各位老师指正

#12


引用 9 楼 cgaolei 的回复:
再支持你一下。祝你考试顺利。

请教一道SCJP的题目,关于垃圾回收的,请各位前辈多多指教谢谢这位大哥!

#13


学习。

#14


引用 10 楼 yejinson 的回复:
如果是问你有多少个对象就打4个, 如果考你的是lcelandic就2个 
Long weight = 1200L 可能改为long wight = 1200L;

请问具体是那四个对象???感觉很晕!!!

#15


学习了

#16


TestInside SUN 310-065:

248. 已知:
3. interface Animal { void makeNoise(); }
4. class Horse implements Animal {
5. Long weight = 1200L;
6. public void makeNoise() { System.out.println("whinny"); }
7. }
8. public class Icelandic extends Horse {
9. public void makeNoise() { System.out.println("vinny"); }
10. public static void main(String[] args) {
11. Icelandic i1 = new Icelandic();
12. Icelandic i2 = new Icelandic();
13. Icelandic i3 = new Icelandic();
14. i3 = i1; i1 = i2; i2 = null; i3 = i1;
15. }
16. }
到達第 15 行時,有多少個物件能資源回收?
A. 0
B. 1
C. 2
D. 3
E. 4
F. 6
Answer: E

#1


自己顶一下

#2


各位老师帮忙看看呀

#3


请教一道SCJP的题目,关于垃圾回收的,请各位前辈多多指教
大家都吃饭去啦?

#4


SCJP这么变态?

#5


你的想法实际没错,也可以这么去争辩,但是有点想的太多了。 当回收一个对象时,其下的所有实例都要被回收,2个Icelandic中的Long是指定要被回收的。但真正要考你的是Iclandic 1和3要被回收,所以是2个。

题目出的也有问题,不够严谨。这不会是官方正试的题吧???还是练习题?练习题可能不够严谨还能说的过去。要是正式题也这么出,这道题应该review一下了。。呵呵

#6


引用 5 楼 cgaolei 的回复:
你的想法实际没错,也可以这么去争辩,但是有点想的太多了。 当回收一个对象时,其下的所有实例都要被回收,2个Icelandic中的Long是指定要被回收的。但真正要考你的是Iclandic 1和3要被回收,所以是2个。 
  
 题目出的也有问题,不够严谨。这不会是官方正试的题吧???还是练习题?练习题可能不够严谨还能说的过去。要是正式题也这么出,这道题应该review一下了。。呵呵


是练习题,估计是和您说的一样,但愿考试别遇到这种模棱两可的题目吧 请教一道SCJP的题目,关于垃圾回收的,请各位前辈多多指教

#7


i3 = i1; ---------- i3指向的对象没有被引用                      
                      i3指向了i1所执行的对象

i1 = i2; ----------i1指向了i2所指向的对象

i2 = null;---------i2没有指向任何对象 


i3 = i1; ----------此时i1执行了指向的i2开始指向的对象
                      i3此时也指向了i2开始指向的对象
                       i1开始执行的对象没有被引用
综上所述:
有资格被回收的对象是i1、i3指向的对象!

#8


引用 6 楼 xlmaxlma 的回复:
引用 5 楼 cgaolei 的回复:
你的想法实际没错,也可以这么去争辩,但是有点想的太多了。 当回收一个对象时,其下的所有实例都要被回收,2个Icelandic中的Long是指定要被回收的。但真正要考你的是Iclandic 1和3要被回收,所以是2个。

题目出的也有问题,不够严谨。这不会是官方正试的题吧???还是练习题?练习题可能不够严谨还能说的过去。要是正式题也这么出,这道题应该review一下了。。呵呵


是练习题,估计是和您说…


正式考题都是很严谨的,像这类题都只会有唯一的答案,你可以放心。正式题都是一遍遍筛出来的。。

#9


再支持你一下。祝你考试顺利。

#10


如果是问你有多少个对象就打4个, 如果考你的是lcelandic就2个
Long weight = 1200L 可能改为long wight = 1200L;

#11


引用 7 楼 weiluo12 的回复:
i3 = i1; ----------i3指向的对象没有被引用                       
                       i3指向了i1所执行的对象 
  
 i1 = i2; ----------i1指向了i2所指向的对象 
  
 i2 = null;---------i2没有指向任何对象  
  
  
 i3 = i1; ----------此时i1执行了指向的i2开始指向的对象 
                       i3此时也指向了i2开始指向的对象 
                       i1开始执行的对象没有被引用 
 综上所述: 
 有资格被回收的…


对的,问题是此2个对象在heap中还建有2个Long对象,因为这里是Long,用的包装器;如果是long那又是另一回事了

问题是此时Long不会自动解包的呀,Long依旧还一个对象,所以我认为是4个对象,请各位老师指正

#12


引用 9 楼 cgaolei 的回复:
再支持你一下。祝你考试顺利。

请教一道SCJP的题目,关于垃圾回收的,请各位前辈多多指教谢谢这位大哥!

#13


学习。

#14


引用 10 楼 yejinson 的回复:
如果是问你有多少个对象就打4个, 如果考你的是lcelandic就2个 
Long weight = 1200L 可能改为long wight = 1200L;

请问具体是那四个对象???感觉很晕!!!

#15


学习了

#16


TestInside SUN 310-065:

248. 已知:
3. interface Animal { void makeNoise(); }
4. class Horse implements Animal {
5. Long weight = 1200L;
6. public void makeNoise() { System.out.println("whinny"); }
7. }
8. public class Icelandic extends Horse {
9. public void makeNoise() { System.out.println("vinny"); }
10. public static void main(String[] args) {
11. Icelandic i1 = new Icelandic();
12. Icelandic i2 = new Icelandic();
13. Icelandic i3 = new Icelandic();
14. i3 = i1; i1 = i2; i2 = null; i3 = i1;
15. }
16. }
到達第 15 行時,有多少個物件能資源回收?
A. 0
B. 1
C. 2
D. 3
E. 4
F. 6
Answer: E