java如何判断一个对象是否死去?

简单直观的一个方法是:对一个对象添加引用计数器。每当有地方引用它时,计数器的值加 1;当引用失效时,计数器de的值减 1.而当计数器的值为 0 时这个对象就不会再被使用,判断为已死。但这种方法有些情况会不准确:比如当对象 A 中有一个字段指向了对象 B,而对象 B 中 也有一个字段指向了对象 A,而事实上他们俩都不再使用,但计数器的值永远都不可能为 0,也就不会被回收,然后就发生了内存泄露。

正确的方法是:可达性分析. 所有生成的对象都是一个为"GCRoots"的根的子树。从 GC Roots 开始向下搜索,搜索所经过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链可以到达时,就称这个对象是不可达的或者是不可引用的,也就是已经死去的对象,可以被 GC 回收了。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值