A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马胜平 中级黑马   /  2012-2-22 11:10  /  2505 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下列代码中第几行的obj符合垃圾回收器的标准?这是我做练习时候碰到的一个题目,顺便问下垃圾回收器回收对象的标准是什么
1   Object aobj=new Object();
2   Object  bobj=new Object();
3   Object  cobj=new Object();
4   aobj=bobj;
5   aobj=cobj;
6   cobj=null;
7   aobj=null;

5 个回复

倒序浏览
你所说的回收对象,应该是指回收分配给对象的内存空间吧~!
垃圾收集器的工作目标是回收已经无用的对象的内存空间,从而避免内存渗漏体的产生,节省内存资源,避免程序代码的崩溃。
垃圾收集器判断一个对象的内存空间是否无用的标准是:如果该对象不能再被程序中任何一个“活动的部分”所引用,此时我们
就说,该对象的内存空间已经无用。所谓“活动的部分”,是指程序中某部分参与程序的调用,正在执行过程中,尚未执行完毕。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
http://wenku.baidu.com/view/8c1720da7f1922791688e815.html百度文库

第7行。注意这类题型是认证考试中可能遇到的最难题型了。

行1-3分别创建了Object类的三个对象:aobj,bobj,cobj

行4:此时对象aobj的句柄指向bobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。

行5:此时对象aobj的句柄指向cobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。

行6:此时仍没有任何一个对象符合垃圾收集器的收集标准。

行7:对象cobj符合了垃圾收集器的收集标准,因为cobj的句柄指向单一的地址空间。在第6行的时候,cobj 已经被赋值为null,但由cobj同时还指向了aobj(第5行),所以此时cobj并不符合垃圾收集器的收集标准。而在第7行,aobj所指向的地址空间也被赋予了空值null,这就说明了,由cobj所指向的地址空间已经被完全地赋予了空值。所以此时cobj最终符合了垃圾收集器的收集标准。但对于aobj和bobj,仍然无法判断其是否符合收集标准。

总之,在Java语言中,判断一块内存空间是否符合垃圾收集器收集标准的标准只有两个:

1.给对象赋予了空值null,以下再没有调用过。

2.给对象赋予了新值,既重新分配了内存空间。


最后再次提醒一下,一块内存空间符合了垃圾收集器的收集标准,并不意味着这块内存空间就一定会被垃圾收集器收集。


下面附件就是,希望对你有帮助.....当然我也学到不少东西..



java垃圾回收机制总结.zip

15.8 KB, 下载次数: 189

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
http://wenku.baidu.com/view/8c1720da7f1922791688e815.html百度文库
回复 使用道具 举报
我觉得垃圾回收是应该回收那些不存在引用的对象了,引用为空,不知道对不对
回复 使用道具 举报
我明白了谢谢大家
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马