过程

初始标记

从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

最新文章

  1. 树莓派 基于Web的温度计
  2. 大神的游戏(codevs 1353)
  3. ember.js:使用笔记7 页面中插入效果
  4. 《Python 学习手册4th》 第十六章 函数基础
  5. js函数中的几个特点
  6. linux和windows中设置环境变量经常使用命令
  7. InvokeRequired方法和Invoke函数
  8. HDU1875 畅通工程再续 (并查集)
  9. linux上发布网站遇到的问题
  10. Android App监听软键盘按键的三种方式(转)
  11. Cloudera: Start Impala service by cloudera manager in docker quickstart image
  12. 微信小程序之onLaunch与onload异步问题
  13. button JS篇ant Design of react之二
  14. Clover file list
  15. 20165206 2017-2018-2 《Java程序设计》第七周学习总结
  16. python 在 Windows Server 2008 r2 上 安装失败
  17. Linux 目录结构及文件基本操作
  18. 洛谷P4337 [ZJOI2018]线图(状压+搜索+乱搞)
  19. Hadoop ->> HIVE
  20. sum (bestcoder)

热门文章

  1. Asp.net MVC中如何获取控制器的名称
  2. Fragment学习(一) :生命周期
  3. 梯度下降优化算法综述与PyTorch实现源码剖析
  4. 洛谷P2146 [NOI2015]软件包管理器 题解 树链剖分+线段树
  5. Python--day27--内置函数isinstance和issubclass方法
  6. H3C 建立邻接关系
  7. Redux 初始化完整结构
  8. P1094 百钱白鸡
  9. Spring Security原理篇(一) 启动原理
  10. JOISC2014 Day2 E "交朋友" (思维+假的SCC)