美文网首页
CMS垃圾回收机制

CMS垃圾回收机制

作者: BeYearn | 来源:发表于2018-12-18 16:56 被阅读0次

    一. Concurrent Mark Sweep
    看名字就知道,CMS是一款并发、使用标记-清除算法的gc, 存在着内存碎片化问题
    CMS是针对老年代进行回收的GC。 以获取最小停顿时间为目的。
    在一些对响应时间有很高要求的应用或网站中,用户程序不能有长时间的停顿,CMS 可以用于此场景。

    二. CMS的执行过程

    1. 初始标记 Init-mark (STW 即 stop the world)
      该阶段进行可达性分析,标记GC ROOT能直接关联到的对象. 间接关联的对象在下一阶段标记
    2. 并发标记 Concurrent-mark
      该阶段和用户线程并发执行. 该阶段进行GC ROOT TRACING,在第一个阶段被暂停的线程重新开始运行。 由前阶段标记过的对象出发,所有可到达的对象都在本阶段中标记。
    3. 并发预处理 concurrent-preclean-start
      与下一步的重标记的工作类似. 但为了GC的最短停顿时间, 因此工作尽可能多的在并发阶段完成来减少STW的时间.
      此阶段标记从新生代晋升的对象、新分配到老年代的对象以及在并发阶段被修改了的对象。
    4. 重标记 Remark (STW)
      暂停所有用户线程,重新扫描堆中的对象,进行可达性分析,标记活着的对象。
      有了前面的基础,这个阶段的工作量被大大减轻,停顿时间因此也会减少。
      注意这个阶段是多线程的。
    5. 并发清理 concurrent-sweep-start
      用户线程被重新激活,同时清理那些无效的对象。
    6. 重置 concurrent-reset-start
      CMS清除内部状态,为下次回收做准备。

    相关文章

      网友评论

          本文标题:CMS垃圾回收机制

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