美文网首页
CMS相关flag

CMS相关flag

作者: Foghost | 来源:发表于2020-03-10 10:27 被阅读0次

CMS被设计为尽可能的减少jvm停顿时间的垃圾收集器,使用标记-清除算法思想,其gc周期分为以下几个过程:

  1. Initial Mark:初始标记,单线程,这个过程是需要整个jvm停顿的也即STW,标记从GC Roots可达的老年代对象,这个阶段一般来说暂停时间非常短,这个过程其实只是找到存活对象的引线,用来下个阶段递归标记。

  2. Concurrent Mark:并发标记,这个过程不需要STW,从上个阶段的引线对象开始递归遍历所有可达对象,由于这个过程是并发标记,这个阶段有可能会出现对象晋升、引用关系变化等,这些会在后面的阶段进行修正。

  3. Concurrent Preclean:并发预清理,处理阶段2发生的引用变化,阶段2是并发的,这里进行修正。

  4. Remark:并发重新标记,STW,阶段3也是并发的,这里暂停所有工作线程再次进行标记修正。

  5. Concurrent Sweep:并发清理,清理掉不在被引用的对象。

  6. Concurrent Reset:做一些收尾工作,为下次gc做准备。

-XX:+UseConcMarkSweepGC

CMS垃圾收集器开关,CMS并不是默认收集器,需要手动开启

-XX:+UseParNewGC

当开启了CMS垃圾收集器时,新生代默认会开启这个选项,并不用显式设置,它也是除了Serial收集器之外唯一能与CMS配合工作的年轻代收集器。

-XX:+CMSConcurrentMTEnabled

这个开关仅仅是开启多线程垃圾收集而已,默认是开启的,一般不用设置。

-XX:ConcGCThreads=

设置CMS并发的线程数,其默认值为ConcGCThreads = (ParallelGCThreads + 3)/4,实际使用时可先不设置这个参数,测试调优后再设置其值。

-XX:CMSInitiatingOccupancyFraction= -XX:+UseCMSInitiatingOccupancyOnly

设置CMS GC的触发时机,也就是老年代内存占用比例到这个设定的值百分比时触发FGC,默认是68,即68%,但是仅仅设置这个值时只会在第一次使用这个值,如果希望每次都使用这个值还需要设置-XX:+UseCMSInitiatingOccupancyOnly

-XX:+CMSClassUnloadingEnabled

开启或者关闭CMS对永久代的清理,JDK7默认关闭而JDK8打开,早期的jvm需要额外设置-XX:+CMSPermGenSweepingEnabled,如果不开启这个参数永久代耗尽会进行FULL GC(包括young gen、old gen、perm gen)收集整个堆。如果动态加载的类不多可以关闭这个参数,他会增加CMS的暂停时间。

-XX:+CMSIncrementalMode

CMS增量收集模式,基本不用。

-XX:+ExplicitGCInvokesConcurrent and -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

手动调用gc时使用CMS收集器,例:system.gc(),不设置这个参数会默认触发FULL GC,ExplicitGCInvokesConcurrentAndUnloadsClasses这是指明将永久代也一并收集了。

-XX:+DisableExplicitGC

禁用手工调用gc,例:system.gc()。如果不用垃圾类库这个可以不设置。不确定的话还是设置了吧。

-XX:MaxTenuringThreshold=

经理过多少次YGC后晋升老年代,CMS默认是6,如果比较了解自己应用的特性可以将这个参数设短,可显著提升YGC性能

-XX:+ParallelRefProcEnabled -XX:+CMSParallelInitialMarkEnabled -XX:+CMSParallelRemarkEnabled

ParallelRefProcEnabled让jvm并行处理Reference对象(例:WeakReference),默认不开启。

CMSParallelInitialMarkEnabled初始标记阶段并行处理,jdk8默认开启。

CMSParallelRemarkEnabled 重新标记阶段并行处理,jdk8默认开启。

-XX:+CMSScavengeBeforeRemark

在CMS remark前执行一次minor GC,默认不开启,会使停顿时间变长,谨慎开启。

-XX:+UnlockDiagnosticVMOptions -XX:ParGCCardsPerStrideChunk=1024

ParGCCardsPerStrideChunkParNew算法中每个线程处理的年轻代与老年代关联的CardTable数量,默认是256,当老年代比较大时建议增大这个值,要使这个值生效需要

同时加参数-XX:+UnlockDiagnosticVMOptions,这个参数需要不断尝试来确定合适值。参考占小狼的博客

相关文章

  • CMS相关flag

    CMS被设计为尽可能的减少jvm停顿时间的垃圾收集器,使用标记-清除算法思想,其gc周期分为以下几个过程: Ini...

  • 2018-12-10

    CMS_v2 https://ctf.hacker101.com/ctf/launch/3 Flag 1 if c...

  • 关于CMS 浮动垃圾的一些理解

    概述 本文尝试回答两个问题 CMS的浮动垃圾是什么,怎么产生的? CMS 为什么要有4个阶段 CMS 和相关知识点...

  • YeserCMS

    i春秋上的一道题,做个记录。说新的CMS系统,帮忙测测是否有漏洞。tips,flag在网站根目录下。访问flag,...

  • Hacker101CTF

    Trivial burp直接查看background.jpg数据即可获得flag Micro_CMS v1 网站提...

  • 2020-12-28 参观CMS 探测器

    @20090613 @ CMS, Geneva, Switzerland 相关链接: 上帝粒子的发现 - 2013...

  • CMS-logs相关整理

    hehehe Retire Some Rarely-Used GC CombinationsDefNew + CM...

  • ConcurrentMarkSweepGeneration

    本文讲解表示CMS老年代的ConcurrentMarkSweepGeneration的相关基础类的实现。 Card...

  • [DNA-Seq] bam相关

    Sam相关参考信息 SAM Flag值说明picard Flag值查询soft clip and hard cli...

  • iOS 11 中 App Store 首页CMS组件设计推测

    最近几个月一直在做CMS相关的工作,无脑推测一波App Store首页内容系统的架构。 CMS系统分为信息流与内容...

网友评论

      本文标题:CMS相关flag

      本文链接:https://www.haomeiwen.com/subject/lfsdfhtx.html