深入JVM-垃圾回收-可达性分析算法
【摘要】 目前关于垃圾回收这一块, 很多解释都是说引用计数。实际上,Java在垃圾回收这里,远不是引用计数这么简单。它采用的是可达性分析算法。首先在我们的虚拟机里,有一个GC Roots的对象,作为引用的起点,由此节点成树状分散,到达每一个对象。从GC Roots到对象的路径被称为引用链。如下图:途中,Object 1 2 3 4拥有引用链可以到达GcRoots,也就是说他们为存活的对象而5 6 7并...
目前关于垃圾回收这一块, 很多解释都是说引用计数。
实际上,Java在垃圾回收这里,远不是引用计数这么简单。它采用的是可达性分析算法。
首先在我们的虚拟机里,有一个GC Roots的对象,作为引用的起点,由此节点成树状分散,到达每一个对象。
从GC Roots到对象的路径被称为引用链。
如下图:
途中,Object 1 2 3 4拥有引用链可以到达GcRoots,也就是说他们为存活的对象
而5 6 7并没有可以到达GcRoots的引用链,则他们为可回收对象。
只是可回收,并非一定要回收
在Java语言中,可作为GC Roots的对象包含以下几种:
1、虚拟机栈(栈帧中的局部变量表) / 本地方法栈中(Native方法) 中引用的对象
2、方法区中类属性引用的对象
3、方法区中常量持中引用的对象
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)