可达性分析算法

内容概述

当前主流的商用JVM都采用可达性分析算法来判断对象是否存活。这个算法的基本思路就是通过一系列称为"GC Roots"的根对象作为起始点,从这些节点开始根据引用关系向下搜索,搜索过程所走过的路径称为引用链,当一个对象到任何GC Roots都没有引用链相连时,则证明此对象是不可用的,可以被回收。

可达性分析算法将 Java 堆视为一个有向图 。它不再纠结于单纯的引用计数,而是通过一组被称为 GC Roots 的节点(如栈中引用的对象、静态属性)作为起点,进行深度优先搜索

搜索过程中走过的路径即为"引用链"。如果一个对象无法通过任何路径连接到 GC Roots,哪怕它持有循环引用,也会被判定为"垃圾"。这是 G1、CMS 等现代收集器的核心逻辑。

思考一下

问题: 如果 GC Roots 集合被错误地清空,会发生什么?

提示: 考虑整个堆内存中的对象是否会被瞬间全部回收,包括正在使用的核心对象。

相关推荐
weisian1512 小时前
JVM--5-深入 JVM 方法区:类的元数据之家
jvm·元空间·方法区
橘橙黄又青2 小时前
JVM实践
jvm
团子的二进制世界2 小时前
JVM为什么能跨平台、原理是什么
jvm
m0_7066532316 小时前
用Python批量处理Excel和CSV文件
jvm·数据库·python
qq_4232339017 小时前
Python深度学习入门:TensorFlow 2.0/Keras实战
jvm·数据库·python
2401_8365631818 小时前
用Python读取和处理NASA公开API数据
jvm·数据库·python
难得的我们19 小时前
超越Python:下一步该学什么编程语言?
jvm·数据库·python
OnYoung21 小时前
编写一个Python脚本自动下载壁纸
jvm·数据库·python
多多*21 小时前
2月3日面试题整理 字节跳动后端开发相关
android·java·开发语言·网络·jvm·adb·c#