美文网首页
GC 两种算法(引用计数法和可达性分析算法)

GC 两种算法(引用计数法和可达性分析算法)

作者: 32b701b24e5b | 来源:发表于2019-07-10 17:29 被阅读0次

一、引用计数法(ReferenceCounting)

1、算法

    给对象中添加一个引用计数器,每当有一个地方引用他时,计数器值就+1,;当引用失效时,计数器值就-1;任何时刻计数器为0的对象就是不可能在被使用。

2、优缺点

(1)优点

判定效率很高。

(2)缺点

不会完全准确,因为如果出现两个对象相互引用的问题就不行了。如下代码所示:

3、分析上述代码

很明显,到最后两个实例都不再用了(都等于null了),但是GC却无法回收,因为引用数不是0,而是1,这就造成了内存泄漏。也很明显,现在虚拟机都不采用此方式。

二、可达性分析算法(Reachability Analysis)

1、算法

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

(2.1)、红色代表不可达对象(可回收对象)

(2.2)、千万注意!!!!!上图并不是说方法区全可达,虚拟机栈部分可达,本地方法栈全部不可达,而只是为了说明这三个部分可以作为GC Roots!

3、可以作为GC Roots的对象包括以下几点

(3.1)、虚拟机栈(栈帧中的本地变量表)中引用的对象。

(3.2)、方法区中的类静态属性引用的对象或者常量引用的对象。

(3.3)、本地方法栈中JNI(就是native方法)引用的对象。

相关文章

  • Android 性能优化-GC确定回收的算法

    本文中分享两种GC确定回收的算法 引用计数算法以及可达性分析算法 引用计数算法:简单来说引用计数算法就是当前内存地...

  • 送给Android程序员2021全新整理的面试合集,只为助力年后

    垃圾回收算法 标记算法: 引用计数法 可达性分析法(注意GC root的类型,虚拟机栈和本地方法栈引用的对象、静态...

  • JVM-垃圾回收算法

    一、对象已死吗? JVM中判断对象是否存活有两种算法:引用计数法、可达性分析算法。 1.引用计数法(Referen...

  • JAVA判断一个对象生存还是死亡

    JAVA中判断一个对象是否死亡的算法有两种: 引用计数算法 可达性分析算法 一、引用计数算法 所谓引用计数算法就是...

  • 图解垃圾回收

    为什么要学习 GC ? 常用的垃圾回收算法 引用计数法 可达性分析法 标记-清除(Mark-Sweep) 优化:多...

  • java架构知识总结--jvm相关(回收部分)

    目的 回收机制整理 知识概括: 必须掌握知识概括 标记算法引用计数法分析可达性算法gc root有:虚拟机栈静态方...

  • 深入理解JVM(第三章笔记)

    垃圾回收算法 JVM的垃圾回收算法并不是引用计数法,而是可达性分析算法 可达性分析算法: 在判断一个对象是否可以被...

  • GV算法及分区

    GV的算法有标记-清除算法、标记-整理算法、复制算法、分代算法;对于那些对象可以回收,有引用计数法和可达性分析算法...

  • 2.2 对象存活判断

    1. 引用计数算法。无法解决仅仅互相引用的问题。 2. 可达性分析算法。可以通过GC Roots到达的即存活,否则...

  • 垃圾收集

    判断对象是否已死: 引用计数法(很难解决对象之间相互循环引用的问题) 可达性分析算法 可作为GC Roots的对象...

网友评论

      本文标题:GC 两种算法(引用计数法和可达性分析算法)

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