可达性分析算法

内容概述

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

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

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

思考一下

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

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

相关推荐
HwJack2012 小时前
Flask+SQLite简易后端数据存储实现原理
jvm·sqlite·flask
Dicky-_-zhang12 小时前
Redis集群模式详解与实战配置
java·jvm
Kiling_070413 小时前
面向对象和集合编程题 ( 一 )
jvm·windows
上弦月-编程13 小时前
Java类与对象:编程核心解密
java·开发语言·jvm
Dicky-_-zhang13 小时前
线上故障排查与应急响应实战:从零开始建立你的SRE体系
java·jvm
大大杰哥13 小时前
从 Volatile 到 ThreadLocal:Java 线程安全机制备忘
java·开发语言·jvm
AI人工智能+电脑小能手13 小时前
【大白话说Java面试题 第67题】【JVM篇】第27题:生产环境服务器变慢,诊断思路和性能评估谈谈?
java·服务器·jvm·面试
Dicky-_-zhang14 小时前
服务网格Istio mTLS配置实战
java·jvm
Dicky-_-zhang14 小时前
服务网格实战:Istio与Linkerd对比选型与落地实践
java·jvm
存在的五月雨14 小时前
JVM 入门学习笔记(内存模型 / GC / 类加载机制)
jvm·笔记·学习