可达性分析算法

内容概述

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

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

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

思考一下

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

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

相关推荐
晊晌_h9 小时前
嵌入式从0到精通——线程
java·开发语言·jvm
cfm_291414 小时前
JDK8+ JVM核心配置参数
jvm
煮煮论英雄15 小时前
单文件部署的MQTT轻量级物联网数据平台
jvm·物联网·oracle
wuminyu2 天前
深入剖析 Panama Off-heap 的性能损耗与开销
java·linux·c语言·jvm·c++
uoKent3 天前
c++中new和malloc的区别
java·jvm·c++
~木雨3 天前
String 底层原理与常量池全解析:byte []+coder、intern 陷阱、substring 内存泄漏,一篇讲透
java·jvm·内存优化·string·字符串常量池
cfm_29143 天前
ThreadLocal 内存泄漏
java·jvm
liangbo73 天前
JVM规范第 6 章:Java 虚拟机指令集
java·jvm
2501_937860943 天前
Java多线程初阶(下)—— synchronized、volatile、wait/notify与经典并发工具
java·开发语言·jvm
二十雨辰4 天前
[Java]-JVM面试题
java·开发语言·jvm