垃圾回收,糊涂了。。。
程序段3:
1.Object aobj = new Object ( ) ; //设定由new Object()而产生所分配的内存块为A
2.Object bobj = new Object ( ) ; //设定由new Object()而产生所分配的内存块为B
3.Object cobj = new Object ( ) ; //设定由new Object()而产生所分配的内存块为C
4.aobj = bobj;
5.aobj = cobj;
6.cobj = null;
7.aobj = null;
问:这段代码中,第几行的内存空间符合垃圾收集器的收集标准?
答:第7行。
行1-3分别创建了Object类的三个对象:aobj,bobj,cobj
行4:此时对象aobj的句柄指向bobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。 //问题一:但我自己认为这时从行4开始内存块A已经没有机会可以再被引用了,所以我认为内存块A此时可以被回收,我自己觉得应该可以选择行4的。请问我这样理解对吗?谢谢。。。。
行5:此时对象aobj的句柄指向cobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。
行6:此时仍没有任何一个对象符合垃圾收集器的收集标准。
行7:对象cobj符合了垃圾收集器的收集标准,因为cobj的句柄指向单一的地址空间。在第6行的时候,cobj已经被赋值为null,但由cobj同时还指向了aobj(第5行),所以此时cobj并不符合垃圾收集器的收集标准。而在第7行,aobj所指向的地址空间也被赋予了空值null,这就说明了,由cobj所指向的地址空间已经被完全地赋予了空值。所以此时cobj最终符合了垃圾收集器的收集标准。 但对于aobj和bobj,仍然无法判断其是否符合收集标准。
问题二:行4中 aobj = bobj;这个语句可不可以是这样理解的:给对象aobj赋予了新值为bobj,既重新分配了aobj的内存空间为bobj所代表的内存空间。谢谢。。。。
问题三:垃圾回收指的是回收对象的句柄,还是回收对象所代表的内存块呢??