zoukankan      html  css  js  c++  java
  • CMS总结

    过程

    初始标记

    从roots(例如:thread stack引用的对象,static对象),新生代对象,标记直接引用的老年代对象。

    并发标记

    利用初始标记阶段标记的对象,递归标记整个老年代。

    该阶段与用户线程并行执行,产生变化的对象(新建,晋升,引用变化(不引用)等)所在的Card标记为Dirty。

    重新标记

    使用roots,新生代对象,仅标记老年代中Dirty Card中的对象。

    并发清除

    清除未标记的对象。

    与用户线程并行执行。

    调优

    ConcurrentMode Failure

    并发标记,并发清除都是与用户线程同时进行,可能会产生太多新对象,导致老年代空间不够。

    出现ConcurrentMode Failure,退化为stop-the-world的serial old gc。

    设置CMSInitiatingOccupancyFraction UseCMSInitiatingOccupancyOnly,调低触发cms的时机,预留足够空间,避免发生CMF。

    CMSScavengeBeforeRemark

    重新标记之前,进行一次young gc,减少source。

    UseCMSCompactAtFullCollection & CMSFullGCsBeforeCompaction=5

    开启碎片压缩,解决内存碎片问题。但不必每次都压缩,影响gc效率。

    设置并发gc的线程数

    参考:

    https://docs.oracle.com/en/java/javase/13/gctuning/concurrent-mark-sweep-cms-collector.html#GUID-937A32AD-E2EA-4109-823D-A66D001A1807 https://www.jianshu.com/p/2a1b2f17d3e4

  • 相关阅读:
    换博客啦
    how2heap学习(二)
    hitcontraining_uaf && hacknote
    WHUCTF PWN题目
    记一次AWD
    how2heap学习(一)
    pwnable_start & ciscn_2019_es_2 & ez_pz_hackover_2016 & pwn2_sctf_2016
    pwnable_start (内联汇编)
    2020年5月计划
    一道逆向出题笔记
  • 原文地址:https://www.cnblogs.com/vsop/p/11966868.html
Copyright © 2011-2022 走看看