美文网首页
垃圾收集--判断对象是否存活(1)

垃圾收集--判断对象是否存活(1)

作者: Chasel_H | 来源:发表于2018-07-06 17:23 被阅读0次

             垃圾收集(GC):对一些死去的对象(即不可能再被任何途径使用的对象)进行回收。

            所以垃圾收集器在对堆回收之前要先确定哪些对象已经“死去”,所以这时就需要我们去了解下面的垃圾收集算法:

    (1)引用计数算法

    引用计数算法:给对象中添加一个引用计数器,每当一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器值都为0的对象就是不可能再被使用的。

                优点:实现简单,判断效率高

                缺点:很难解决对象之间的相互循环引用的问题。


    (2)根搜索算法

            (Java和C#都是使用根搜索算法判定对象是否存活的。)

    根搜索算法:通过一系列的名为“GC Roots”的对象作为起始点,从这些结点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC  Roots没有任何引用链相连时,则证明此对象是不可用的。如图,object5/6/7虽然相互有关联,但是它们到GC Roots是不可到达的,所以它们将会被判定为是可回收对象。

    在Java语言中,可作为GC Roots的对象包括以下几种:

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

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

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

    4.本地方法栈中JNI(即一般说的native方法)的引用的对象

    根搜索算法判定对象是否可回收

    相关文章

      网友评论

          本文标题:垃圾收集--判断对象是否存活(1)

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