符合垃圾自动垃圾回收的标准

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值