首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编程中的死亡对象

编程中的死亡对象

作者头像
GreizLiao
发布2019-09-24 15:45:01
3370
发布2019-09-24 15:45:01
举报
文章被收录于专栏:足球是圆的足球是圆的

对象死亡

  在之前的 Java内存区域文章中已经知道几乎所有Java对象实例都存放在堆中,GC对堆进行回收之前先是判断哪些对象已经“死亡”。那么问题来了,怎么样确定一个对象是否已经死亡呢?   判断对象是否已经死亡有引用计数算法和可达性分析算法

引用计数算法(Reference Counting)

  给对象中添加一个引用计数器,当每有一个地方应用它时,计数器值加1;当引用失效时,计数器值减1;任何时刻计数器为0的对象就是不可能被使用(死亡状态)。这个计数算法实现简单,判断效率也高,但是出现两个实例相互引用并且没有其他地方引用这两个对象的情况,那么这两个对象实际上已经是死亡状态,可是计算器的值不为0,存在误判的,会导致内存溢出。哈哈,是不是觉得这个方法忽悠人的。

可达性分析算法(Reachability Analysis)

  现在jvm就是通过可达性分析来判断对象是否存活的。基本思路是通过一系列称为“GC Roots”的对象作为起始点,从这些点开始向下搜索,搜索所经过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,证明此对象是不可用的(死亡状态)。如下图:object 5、object 6、object 7虽然相互关联,但是它们到GC Roots 是不可达的,所以它们被判断为是可回收的对象。

可达性分析算法图
可达性分析算法图
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 对象死亡
    • 引用计数算法(Reference Counting)
      • 可达性分析算法(Reachability Analysis)
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档