GC

CMS

介绍

用于对年老代的回收,目标是尽量减少应用的暂停时间,减少full gc发生的几率,利用和应用程序线程并发的垃圾回收线程来标记清除年老代。适用于响应时间大于吞吐量优先应用

原理

初始标记(CMS-initial-mark) -> 并发标记(CMS-concurrent-mark) -> 重新标记(CMS-remark) -> 并发清除(CMS-concurrent-sweep) ->并发重设状态等待下次CMS的触发(CMS-concurrent-reset),在1、3阶段暂停应用,整个时间小于200毫秒为优。young generation的回收采用的仍然是并行复制收集器,这个跟Paralle gc算法是一致的

参数

-XX:+UseConcMarkSweepGC启用CMS

-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。可以同时并行多个垃圾收集线程,但此时用户线程必须停止。后台系统任务可以使用此 gc。

-XX:+UseParNewGC:设置年轻代为多线程收集。可与CMS收集同时使用。在serial基础上实现的多线程收集器。

-XX:ParallelCMSThreads=20 CMS线程回收数

-XX:ParallelGCThreads= N 年轻代线程回收数,默认是(ncpus <= 8) ? ncpus : 3 + ((ncpus * 5) / 8)

-XX:+UseCMSCompactAtFullCollection CMS是不会整理堆碎片的,为了防止堆碎片引起full gc,通过会开启CMS阶段进行合并碎片选项,开启这个选项一定程度上会影响性能,配置适当的CMSFullGCsBeforeCompaction来调整性能

-XX:CMSFullGCsBeforeCompaction=1 每次full gc进行碎片的合并,以保证新生代的大对象能分配到老年代

-XX:+CMSParallelRemarkEnabled开启并行remark,减少remark暂停时间

-XX:+CMSScavengeBeforeRemark强制remark之前开始一次minor gc,减少remark的暂停时间

-XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled 避免P区引起的full gc

-XX:CMSInitiatingOccupancyFraction=80年老代占比超过xx进行CMS收集,年老代增长较慢可调大该值,设置过高可能导致:Concurrent mode failed(由于CMS回收年老代的速度太慢,导致年老代在CMS完成前就被沾满,引发full gc)。计算公式:(Xmn-S0)/Old<=Old(1-F)

-XX:MaxTenuringThreshold 年龄达到一定阈值被移入老年代

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原文阅读 前言 这段时间懈怠了,罪过! 最近看到有同事也开始用上了微信公众号写博客了,挺好的~给他们点赞,这博客我...
    码农戏码阅读 6,157评论 2 31
  • 声明:原创文章,转载请注明出处。http://www.jianshu.com/u/e02df63eaa87 1、J...
    唐影若凡阅读 1,344评论 0 6
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 16,054评论 3 83
  • 声明:原创文章,转载请注明出处。http://www.jianshu.com/u/e02df63eaa87 垃圾收...
    唐影若凡阅读 1,154评论 1 6
  • System.gc整理 System.gc()源码public static void gc() { Runtim...
    andersonoy阅读 3,147评论 0 1

友情链接更多精彩内容