一道垃圾收集的题目, 为什么答案是B?

steeven 2001-10-21 03:15:27
How many objects are eligible for garbage collection once execution has reached the line labeled Line A?

String name;
String newName = "Nick";
newName = "Jason";
name = "Frieda";

String newestName = name;

name = null;
//Line A

a) 0
b) 1
c) 2
d) 3
e) 4



...全文
186 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanchengpeng 2002-01-11
  • 打赏
  • 举报
回复
我认为应该是2个:
String name;
String newName = "Nick"; (name="null"被收集)
newName = "Jason"; (收集"Nick")
name = "Frieda";





contributor 2002-01-11
  • 打赏
  • 举报
回复
steeven(steeven) is right. Answer is "two".
skt985 2002-01-11
  • 打赏
  • 举报
回复
37741关注! :)
wangtaoyy 2002-01-11
  • 打赏
  • 举报
回复
只有newName = "Jason"; 导致newName 原先引用的对象被回收
答案 b.
zych72 2001-10-31
  • 打赏
  • 举报
回复
只有"NICK"
在 newName = "Jason";
以后可以被回收,当然只有1个了
steeven 2001-10-31
  • 打赏
  • 举报
回复
sorry, 我看错了,原来newestName 不是newName :)

感觉上收集的时候是看具体的String, 有变量参照到它就不会被收集,没有的要被收集
panq 2001-10-23
  • 打赏
  • 举报
回复
String newestName = name; //这里那要收集?这只是把name的引用给一个新的string newestName .
我同意njallenwang(令狐冲冲) 只有一个。在newName = "Jason";处收集。

whyyy78 2001-10-23
  • 打赏
  • 举报
回复
能不能谈谈现在gc的工作方式?谢谢!
alula 2001-10-23
  • 打赏
  • 举报
回复
to sleepyworm
这好像是gc工作的最初模型, 是最简单的reference counting方式,效率最不好的。
现在gc的工作方式不是这样的哦。
kare 2001-10-23
  • 打赏
  • 举报
回复
各位的答案我越看越糊涂
sleepyworm 2001-10-23
  • 打赏
  • 举报
回复
实际上java里面声明的变量都是指针。
指向某个object,那么这个object的引用就+1,指针不再指向他了就-1,
如果某个object的引用变成0了,那么垃圾收集线程就把她收了。

应该是"Nick"被收集。
ray_town 2001-10-23
  • 打赏
  • 举报
回复
当然是只有一个了,
这里你告诉编译器name = null;
就是说name这个变量所指向的对象你不想要了,
另外两个你不说要不要,gc当然不敢动他,万一gc把
newname什么的扔了,你后面要是还想用怎么办?
在某个变量的命名空间里你不说不想要某样东东了,gc是不会回收他地
hailong326 2001-10-23
  • 打赏
  • 举报
回复
gz
iamfancy 2001-10-23
  • 打赏
  • 举报
回复
运行过后,
newName = "Jason"
newestName = "Frieda"
剩下的一个 "Nick" 被 gc 收集
bobokong 2001-10-23
  • 打赏
  • 举报
回复
gz
njallenwang 2001-10-22
  • 打赏
  • 举报
回复
应该只在newName = "Jason";处收集吧
steeven 2001-10-22
  • 打赏
  • 举报
回复
谢谢各位解答,还是有点不明白:
String name;
String newName = "Nick";
newName = "Jason"; //这时候"Nick"应该可以被回收
name = "Frieda";

String newestName = name; //newestName的原先对象"Jason"要收集

name = null; //这里name虽然致空,但name所指的内存仍可通过newestName访问,不须收集
//Line A
所以应该有两个要被收集
leizhengdeng 2001-10-22
  • 打赏
  • 举报
回复
String name;
String newName = "Nick";
newName = "Jason";
name = "Frieda";

String newestName = name; //这里newestName失去了对原先对象的引用,要收集

name = null; //这里name虽然致空,但name所指的内存仍可通过newestName访问,不须收集
//Line A


//建议到c/c++版察看有关内存泄漏的讨论
alula 2001-10-22
  • 打赏
  • 举报
回复
好像需要弄清楚一些问题了,请教了。
object指的是stack中的reference?还是heap中由new申请的一段内存空间?
GC释放内存时候释放指向null的reference,同时也释放heap中没有被引用的object?好像。
steeven 2001-10-21
  • 打赏
  • 举报
回复
那"nick","jason"没有要被收回?
加载更多回复(3)

62,614

社区成员

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

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