JVM垃圾收集器系列 --- CMS垃圾收集器

  在进入正题前,我们先预热下垃圾收集算法 

  标记清除算法(Mark-Sweep)

  此算法分 标记 清除 两个阶段,首先标记出所有需要回收的对象。在标记完成后统一回收。

  缺点:1.标记和清除效率都不太高

     2.标记清除后会产生大量的垃圾碎片。导致大对象无法分配内存,而不得不提前触发一次垃圾回收。

  复制算法(Copying)

  此算法为了解决效率问题,他将可用的内存分为等大两处,当一块内存用完了,就将还活着的对象复制到另一块上面,然后再把已使用过的内存空间一次性清理掉。

  优点:1.效率高

     2.内存连续,简单高效

  缺点:1.内存消耗为2倍

  标记整理法算(Mark-Compact)

  此算法为了标记清除带来的内存不连续问题,复制算法在活着对象较多的老年代会效率变低。标记过程与标记清除算法一致,但是后序不是直接清理可回收对象,而是将存活的对象都移向一端,然后直接清理掉边界以外的内存

 

  ---------------------------------------------------------------------进入正题-----------------------------------------------------------------------------

  大名鼎鼎的CMS垃圾收集器(Concurrent Mark Sweep)

  该收集器是一种以获取最短回收停顿时间为目标的收集器。整个过程分为4个步骤:

    A:初始标记 stw 标记一下GCroots能直接关联到的对象

    B:并发标记        GCroots tracing过程

    C:重新标记 stw  重新标记是为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的记录

    D:并发清除

    由于整个过程中耗时最长的并发标记和并发清除都可以与用户线程一起工作,所以才称之为并发回收垃圾收集器。

    

    

    CMS一些特点 

      1:CMS对cpu特别敏感

      2:无法收集浮动垃圾

      3:CMS基于标记清除,会有内存碎片。

  

猜你喜欢

转载自www.cnblogs.com/leaveast/p/12396394.html