GC垃圾回收机制

GC垃圾回收机制就是对无用的对象进行回收从而释放内存java

经过俩种算法去判断是否须要去回收算法

  1. 引用计数法

        引用计数法很简单,可是存在问题,于是java并不采用这种方式进行对象存活判断。对象

        引用计数法的逻辑是:在堆中存储对象时,在对象头处会有一个计数器,若是一个对象增长了一个引用与之相连,则次数加一,若是一个引用关系失效则次数减一。若是一个对象的次数变为0,则说明这个对象已经不适用,不处于存活状态blog

        最大问题就是:内存

        若是一个对象A持有对象B,对象B也持有对象A,那么gc永远没法回收这俩个对象变量

             

      2.可达性分析法垃圾回收

        这个算法的基本思路就是经过一系列名为GC Roots的对象做为起始点,从这些节点开始向下搜索,搜索所走过的路径成为引用链,当一个对象到GC Roots没有任何引用链相连时,则证实此对象时不可用的搜索

        

        由图可知,obj8,obj9,obj10都没有到GCRoots对象的引用链,即使obj9和obj10之间有引用链,他们仍是会被当成垃圾处理,能够进行回收引用

 

        通常来讲,如下状况的对象能够做为GC Roots:gc

  • 虚拟栈(栈桢中的本地变量表)中的引用对象
  • 方法区中的类静态属性引用的对象
  • 方法区中的常量引用的对象
  • 本地方法栈中JNI(Native方法)的引用的对象
相关文章
相关标签/搜索