可达性分析算法

内容概述

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

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

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

思考一下

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

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

相关推荐
阿贵---11 分钟前
实战:用Python开发一个简单的区块链
jvm·数据库·python
快乐柠檬不快乐1 小时前
使用Python操作文件和目录(os, pathlib, shutil)
jvm·数据库·python
wuqingshun3141591 小时前
说说进程和线程的区别?
java·开发语言·jvm
2401_874732532 小时前
Python上下文管理器(with语句)的原理与实践
jvm·数据库·python
2401_894241925 小时前
实战:用OpenCV和Python进行人脸识别
jvm·数据库·python
m0_662577975 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
qq_334903155 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python
character08256 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
阿贵---6 小时前
定时任务专家:Python Schedule库使用指南
jvm·数据库·python