黑马程序员技术交流社区

标题: 垃圾回收器回收的标准 [打印本页]

作者: 马胜平    时间: 2012-2-22 11:10
标题: 垃圾回收器回收的标准
下列代码中第几行的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;
作者: 黄凯    时间: 2012-2-22 11:48
你所说的回收对象,应该是指回收分配给对象的内存空间吧~!
垃圾收集器的工作目标是回收已经无用的对象的内存空间,从而避免内存渗漏体的产生,节省内存资源,避免程序代码的崩溃。
垃圾收集器判断一个对象的内存空间是否无用的标准是:如果该对象不能再被程序中任何一个“活动的部分”所引用,此时我们
就说,该对象的内存空间已经无用。所谓“活动的部分”,是指程序中某部分参与程序的调用,正在执行过程中,尚未执行完毕。
作者: 靖美专    时间: 2012-2-22 11:54
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, 下载次数: 179


作者: 花开~的季节    时间: 2012-2-22 11:59
http://wenku.baidu.com/view/8c1720da7f1922791688e815.html百度文库

作者: 沈样    时间: 2012-2-22 12:30
我觉得垃圾回收是应该回收那些不存在引用的对象了,引用为空,不知道对不对
作者: 马胜平    时间: 2012-2-22 12:39
我明白了谢谢大家




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2