-XX:CMSInitiatingOccupancyFraction=70 和-XX:+UseCMSInitiatingOccupancyOnly
CMS GC要决定是否在full GC时做压缩,会依赖几个条件。其中,
第一种条件,UseCMSCompactAtFullCollection 与 CMSFullGCsBeforeCompaction 是搭配使用的;前者目前默认就是true了,也就是关键在后者上。
第二种条件是用户调用了System.gc(),而且DisableExplicitGC没有开启。
第三种条件是young gen报告接下来如果做增量收集会失败;简单来说也就是young gen预计old gen没有足够空间来容纳下次young GC晋升的对象。
上述三种条件的任意一种成立都会让CMS决定这次做full GC时要做压缩。
CMSFullGCsBeforeCompaction 说的是,在上一次CMS并发GC执行过后,到底还要再执行多少次full GC才会做压缩。默认是0,也就是在默认配置下每次CMS GC顶不住了而要转入full GC的时候都会做压缩。 把CMSFullGCsBeforeCompaction配置为10,就会让上面说的第一个条件变成每隔10次真正的full GC才做一次压缩(而不是每10次CMS并发GC就做一次压缩,目前VM里没有这样的参数)。这会使full GC更少做压缩,也就更容易使CMS的old gen受碎片化问题的困扰。 本来这个参数就是用来配置降低full GC压缩的频率,以期减少某些full GC的暂停时间。CMS回退到full GC时用的算法是mark-sweep-compact,但compaction是可选的,不做的话碎片化会严重些但这次full GC的暂停时间会短些;这是个取舍。
2. -XX:CMSInitiatingOccupancyFraction=70 和-XX:+UseCMSInitiatingOccupancyOnly
这两个设置一般配合使用,一般用于『降低CMS GC频率或者增加频率、减少GC时长』的需求
-XX:CMSInitiatingOccupancyFraction=70 是指设定CMS在对内存占用率达到70%的时候开始GC(因为CMS会有浮动垃圾,所以一般都较早启动GC);
-XX:+UseCMSInitiatingOccupancyOnly 只是用设定的回收阈值(上面指定的70%),如果不指定,JVM仅在第一次使用设定值,后续则自动调整.
3. -XX:+CMSScavengeBeforeRemark
在CMS GC前启动一次ygc,目的在于减少old gen对ygc gen的引用,降低remark时的开销-----一般CMS的GC耗时 80%都在remark阶段
-XX:+UseCMSInitiatingOccupancyOnly
我们用-XX+UseCMSInitiatingOccupancyOnly标志来命令JVM不基于运行时收集的数据来启动CMS垃圾收集周期。而是,当该标志被开启时,JVM通过CMSInitiatingOccupancyFraction的值进行每一次CMS收集,而不仅仅是第一次。然而,请记住大多数情况下,JVM比我们自己能作出更好的垃圾收集决策。因此,只有当我们充足的理由(比如测试)并且对应用程序产生的对象的生命周期有深刻的认知时,才应该使用该标志。
-XX:CMSInitiatingOccupancyFraction=70 和-XX:+UseCMSInitiatingOccupancyOnly相关推荐
- CMS收集器几个参数详解 -XX:CMSInitiatingOccupancyFraction, CMSFullGCsBeforeCompaction
CMSInitiatingOccupancyFraction -XX:CMSInitiatingOccupancyFraction这个参数是指在使用CMS收集器的情况下,老年代使用了指定阈值的内存时, ...
- -XX:CMSInitiatingOccupancyFraction
使用例子: -XX:CMSInitiatingOccupancyFraction=70 CMS垃圾收集器,当老年代达到70%时,触发CMS垃圾回收. 查看CMSInitiatingOccupancyF ...
- -XX:CMSInitiatingOccupancyFraction和-XX:+UseCMSInitiatingOccupancyOnly参数
-XX:CMSInitiatingOccupancyFraction:在使用CMS收集器的情况下,指定老年代被使用的内存空间的阈值,达到该阈值则触发Full GC. -XX:+UseCMSInitia ...
- -XX:CMSInitiatingOccupancyFraction=92 Java8
Java8中,-XX:CMSInitiatingOccupancyFraction的默认值是92,详情见官网: Starting a Concurrent Collection Cycle With ...
- 【Flink】TaskSubmissionException: No task slot allocated for job ID xx and allocation ID xx.
文章目录 1.概述 1.概述 flink任务提交报错 TaskSubmissionException: No task slot allocated for job ID xx and allocat ...
- Java编译报错:无法将类XX中的构造器XX应用到给定类型
1.idea新版本搜不到lombok插件? 报错如图: 实体类: 编译的时候报错... 下载的最新版本idea,2021.1.1 不对啊,老版本都没问题的 突然想到虽然有lombok的依赖包,但是插件 ...
- bash xx.sh与sh xx.sh以及./xx.sh的区别
在ubuntu中,sh只是bash的一个链接,执行的程序都是一样的,命令解释器是一样的.但bash xx.sh和./xx.sh和sh xx.sh还是有不同的,bash xx.sh和sh xxx.sh都 ...
- 题目1 求Sum=x+xx+xxx+xxxx+xxx+xx+x的值,其中x是一个1~9的数字。从键盘上输入任意1~9的数字(如输入此范围外的数据,不处理该数据,程序提醒后继续输入),请输出Sum的结果
题目1 求Sum=x+xx+xxx+xxxx+xxx+xx+x的值,其中x是一个19的数字.从键盘上输入任意19的数字(如输入此范围外的数据,不处理该数据,程序提醒后继续输入),请输出Sum的结果:程 ...
- 第9课:jvm的gc时候核心参数详解:-XX:NewRatio、-XX:SurvivorRatio、-XX:NewSize、-XX:MaxNewSize
内容: 1.-XX:NewRatio 2.-XX:SurvivorRatio 3.-XX:NewSize和-XX:MaxNewSize 一.JVM内存结构图 二.参数详解 1.-xx: ...
最新文章
- C++:运算符重载函数之成员运算符重载函数
- 基础才是重中之重~何为原子化操作
- 医宗金鉴自学指南_自学《医宗金鉴》能学会中医吗?
- python OrderedDict 详解
- iptables 开启3306端口
- NAPI 技术在 Linux 网络驱动上的应用和完善
- 网络嵌入之STNE model
- paip.SOCKET抓包工具总结
- 卫星遥感数据处理软件SeaDAS
- 【整理】详解嵌入式片上资源之SDRAM内存
- MongoDB修改器使用
- #35-【刷题】乐乐的方块
- 【Lilishop商城】No4-2.业务逻辑的代码开发,涉及到:会员B端第三方登录的开发-平台注册会员接口开发
- App Inventor 2 题库设计制作流程
- 苹果xr十大隐藏功能_网上找的一些非常实用的苹果笔记本使用技巧及隐藏功能,收藏了...
- 热力学第二定律的局限性与对热寂说的反驳
- 数据备份有哪些种类?
- Explore EPF021D ADC微控制器
- Carsim-Simulink键盘实现控制Carsim车辆转向-1
- 【震惊】富士康再次发生员工跳楼身亡 系半年来第12例