欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

符合垃圾自动垃圾回收的标准(转)

程序员文章站 2022-05-21 17:11:12
...
程序段2:

  1.Object sobj = new Object ( ) ;

  2.Object sobj = null ;

  3.Object sobj = new Object ( ) ;

  4.sobj = new Object ( ) ;

  问:这段代码中,第几行的内存空间符合垃圾收集器的收集标准?

  答:第1行和第3行。因为第2行为sobj赋值为null,所以在此第1行的sobj符合垃圾收集器的收集标准。而第4行相当于为sobj赋值为null,所以在此第3行的sobj也符合垃圾收集器的收集标准。

  如果有一个对象的句柄a,且你把a作为某个构造器的参数,即 new Constructor ( a )的时候,即使你给a赋值为null,a也不符合垃圾收集器的收集标准。直到由上面构造器构造的新对象被赋空值时,a才可以被垃圾收集器收集。

  程序段3:

  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;

  问:这段代码中,第几行的内存空间符合垃圾收集器的收集标准?

  答:第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.给对象赋予了新值,既重新分配了内存空间。

  最后再次提醒一下,一块内存空间符合了垃圾收集器的收集标准,并不意味着这块内存空间就一定会被垃圾收集器收集。
转自:http://blog.csdn.net/javayohn/article/details/3202064
相关标签: java