Java OpenResty Spring Spring Boot MySQL Redis MongoDB PostgreSQL Linux Android Nginx 面试 小程序 Arthas JVM AQS juc Kubernetes Docker DevOps


JVM:垃圾标记阶段算法之可达性分析法

Java JVM 大约 515 字

可达性分析法

也叫根搜索算法、追踪性垃圾收集。

相对于引用计数算法而言,可达性分析算法不仅具备实现简单和执行高效等特点,更重要的是该算法可以有效地解决在引用计算算法中循环引用的问题,防止内存泄漏的发生。

相较于引用计数法,这里的可达性分析就是JavaC#选择的。这种类型的垃圾收集通常也叫作追踪性垃圾收集(Tracing Garbage Collection)。

基本思路

可达性分析算法是以根对象集合(GC Roots)为起始点,按照从上至下的方式搜索被根对象集合所连接的目标对象是否可达。

使用可达性分析算法后,内存中的存活对象都会被根对象集合直接或间接连接着,搜索所走过的路径称为引用链(Reference Chain)。

如果目标对象没有任何引用链相连,则是不可达的,就意味着该对象已经死亡,可以标记为垃圾。

在可达性分析算法中,只有能够被根对象集合直接或间接连接的对象才是存活对象。

GC Roots

所谓GC Roots根集合,就是一组必须活跃的引用。

注意

如果要使用可达性分析算法来判断内存是否可以回收,那么分析工作必须在一个能保障一致性的快照中进行(即:安全区域)。这点不满足的话分析结果的准确性就无法保证。

阅读 280 · 发布于 2022-05-24

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批