美文网首页
可达性分析算法(根搜索算法GCRoots)

可达性分析算法(根搜索算法GCRoots)

作者: 小爪哇海 | 来源:发表于2018-10-10 17:37 被阅读0次

根搜索算法

概念

根搜索算法的基本思路就是通过一系列名为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。

这个算法的基本思想是通过一系列称为“GC Roots”的对象作为起始点,从这些节点向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链(即GC Roots到对象不可达)时,则证明此对象是不可用的。

那么问题又来了,如何选取GCRoots对象呢?在Java语言中,可以作为GCRoots的对象包括下面几种:

(1). 虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。

(2). 方法区中的类静态属性引用的对象。

(3). 方法区中常量引用的对象。

(4). 本地方法栈中JNI(Native方法)引用的对象。

下面给出一个GCRoots的例子,如下图,为GCRoots的引用链。

image.png image.png

根搜索算法的基本思路就是通过一系列名为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。

从上图,reference1、reference2、reference3都是GC Roots,可以看出: reference1-> 对象实例1; reference2-> 对象实例2; reference3-> 对象实例4; reference3-> 对象实例4 -> 对象实例6; 可以得出对象实例1、2、4、6都具有GC Roots可达性,也就是存活对象,不能被GC回收的对象。 而对于对象实例3、5直接虽然连通,但并没有任何一个GC Roots与之相连,这便是GC Roots不可达的对象,这就是GC需要回收的垃圾对象。

相关文章

  • 可达性分析算法(根搜索算法GCRoots)

    根搜索算法 概念 根搜索算法的基本思路就是通过一系列名为”GC Roots”的对象作为起始点,从这些节点开始向下搜...

  • 23. java虚拟机总结-和OOM相关的 (六)

    垃圾回收算法 可达性分析法(根搜索算法,GC ROOTS) 从 GC Roots 向下追溯、搜索,会产生一个叫作 ...

  • 6)HotSpot算法实现

    枚举根结点 可达性算法是相当耗时的,以下两点说明 从可达性分析中从GCRoots节点找引用链这个操作为例,可作为G...

  • Java GC 必知必会

    1. Java 如何标识垃圾 常用的标识算法主要是两类,一是计数器引用法,二是可达性分析(根搜索算法)。 计数器引...

  • 垃圾回收/GC

    标记阶段算法: 找出哪些是需要清除的对象 引用计数法(基本废弃) 可达性分析算法/根结点搜索算法(目前常用) 清除...

  • jvm之垃圾回收小结

    回收算法 java虚拟机采用可达性分析来探索所有的存活对象。从一系列GCRoots出发,边标记边探索所有被引用的对...

  • 可达性分析算法

    可达性分析算法通过一系列成为GCRoots的对象作为起始点,从这些节点上向下搜索,所走过的路径称为引用链,当一个对...

  • java垃圾回收

    判断垃圾:引用计数法,根搜索法(可达性分析) 垃圾回收算法: Mark-Sweep(标记-清除)算法 Copyin...

  • GC Roots

    可达性分析算法 可达性分析算法是HOTSPOT VM采用的判断对象是否存活的算法 通过一系列称为“GC Roots...

  • 15-大厂面试题-JVM垃圾回收采用的是什么算法,有什么区别和优

    通过之前的学习,我们知道了JVM会通过可达性算法来筛选出哪些对象是可回收的,哪些对象是不可回收的,GCRoots对...

网友评论

      本文标题:可达性分析算法(根搜索算法GCRoots)

      本文链接:https://www.haomeiwen.com/subject/incmaftx.html