深入JVM-垃圾回收-可达性分析算法

举报
梦里 发表于 2019/08/10 10:19:26 2019/08/10
【摘要】 目前关于垃圾回收这一块, 很多解释都是说引用计数。实际上,Java在垃圾回收这里,远不是引用计数这么简单。它采用的是可达性分析算法。首先在我们的虚拟机里,有一个GC Roots的对象,作为引用的起点,由此节点成树状分散,到达每一个对象。从GC Roots到对象的路径被称为引用链。如下图:途中,Object 1 2 3 4拥有引用链可以到达GcRoots,也就是说他们为存活的对象而5 6 7并...

目前关于垃圾回收这一块, 很多解释都是说引用计数。

实际上,Java在垃圾回收这里,远不是引用计数这么简单。它采用的是可达性分析算法。

首先在我们的虚拟机里,有一个GC Roots的对象,作为引用的起点,由此节点成树状分散,到达每一个对象。

从GC Roots到对象的路径被称为引用链。

如下图:

下载.png

途中,Object 1 2 3 4拥有引用链可以到达GcRoots,也就是说他们为存活的对象

而5 6 7并没有可以到达GcRoots的引用链,则他们为可回收对象。

只是可回收,并非一定要回收


在Java语言中,可作为GC Roots的对象包含以下几种:

1、虚拟机栈(栈帧中的局部变量表) / 本地方法栈中(Native方法) 中引用的对象

2、方法区中类属性引用的对象

3、方法区中常量持中引用的对象


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。