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
最新文章
- 树莓派 基于Web的温度计
- 大神的游戏(codevs 1353)
- ember.js:使用笔记7 页面中插入效果
- 《Python 学习手册4th》 第十六章 函数基础
- js函数中的几个特点
- linux和windows中设置环境变量经常使用命令
- InvokeRequired方法和Invoke函数
- HDU1875 畅通工程再续 (并查集)
- linux上发布网站遇到的问题
- Android App监听软键盘按键的三种方式(转)
- Cloudera: Start Impala service by cloudera manager in docker quickstart image
- 微信小程序之onLaunch与onload异步问题
- button JS篇ant Design of react之二
- Clover file list
- 20165206 2017-2018-2 《Java程序设计》第七周学习总结
- python 在 Windows Server 2008 r2 上 安装失败
- Linux 目录结构及文件基本操作
- 洛谷P4337 [ZJOI2018]线图(状压+搜索+乱搞)
- Hadoop ->;>; HIVE
- sum (bestcoder)
热门文章
- Asp.net MVC中如何获取控制器的名称
- Fragment学习(一) :生命周期
- 梯度下降优化算法综述与PyTorch实现源码剖析
- 洛谷P2146 [NOI2015]软件包管理器 题解 树链剖分+线段树
- Python--day27--内置函数isinstance和issubclass方法
- H3C 建立邻接关系
- Redux 初始化完整结构
- P1094 百钱白鸡
- Spring Security原理篇(一) 启动原理
- JOISC2014 Day2 E ";交朋友"; (思维+假的SCC)