「javacms参数」java中参数是什么
本篇文章给大家谈谈javacms参数,以及java中参数是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
垃圾收集器-CMS、三色标记、记忆集
CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。它非常符合在注重用户体验的应用上使用,它是HotSpot虚拟机第一款真正意义上的并发收集器,它第一次实现了让垃圾收集线程与用户线程(基本上)同时工作。
从名字中的Mark Sweep这两个词可以看出,CMS收集器是一种 “标记-清除”算法实现的,它的运作过程相比于前面几种垃圾收集器来说更加复杂一些。整个过程分为四个步骤:
初始标记:
暂停所有的其他线程(STW),并记录下gc roots直接能引用的对象,速度很快
并发标记:
并发标记阶段就是从GC Roots的直接关联对象开始遍历整个对象图的过程, 这个过程耗时较长但是不需要停顿用户线程, 可以与垃圾收集线程一起并发运行。因为用户程序继续运行,可能会有导致已经标记过的对象状态发生改变。
重新标记:
重新标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段的时间稍长,远远比并发标记阶段时间短。主要用到三色标记里的增量更新算法(见下面详解)做重新标记。
并发清理:
开启用户线程,同时GC线程开始对未标记的区域做清扫。这个阶段如果有新增对象会被标记为黑色不做任何处理(见下面三色标记算法详解)。
并发重置:
重置本次GC过程中的标记数据。
从它的名字就可以看出它是一款优秀的垃圾收集器,主要优点:并发收集、低停顿。但是它有下面几个明显的缺点:
1.对CPU资源敏感(会和服务抢资源);
2.无法处理浮动垃圾( 在并发标记和并发清理阶段又产生垃圾 ,这种浮动垃圾只能等到下一次gc再清理了);
3.它使用的回收算法-“标记-清除”算法会导致收集结束时会有大量空间碎片产生,当然通过参数-XX:+UseCMSCompactAtFullCollection可以让jvm在执行完标记清除后再做整理执行过程中的不确定性,会存在上一次垃圾回收还没执行完,然后垃圾回收又被触发的情况,特别是 在并发标记和并发清理阶段会出现,一边回收,系统一边运行,也许没回收完就再次触发full gc,也就是"concurrent mode failure",此时会进入stop the world,用serial old垃圾收集器来回收
CMS的相关核心参数
1.-XX:+UseConcMarkSweepGC:启用cms
2.-XX:ConcGCThreads:并发的GC线程数
3.-XX:+UseCMSCompactAtFullCollection:FullGC之后做压缩整理(减少碎片)
4.-XX:CMSFullGCsBeforeCompaction:多少次FullGC之后压缩一次,默认是0,代表每次FullGC后都会压缩一 次
5.-XX:CMSInitiatingOccupancyFraction: 当老年代使用达到该比例时会触发FullGC(默认是92,这是百分比)
6.-XX:+UseCMSInitiatingOccupancyOnly:只使用设定的回收阈值(-XX:CMSInitiatingOccupancyFraction设 定的值),如果不指定,JVM仅在第一次使用设定值,后续则会自动调整
7.-XX:+CMSScavengeBeforeRemark:在CMS GC前启动一次minor gc,目的在于减少老年代对年轻代的引用,降低CMS GC的标记阶段时的开销,一般CMS的GC耗时 80%都在标记阶段
8.-XX:+CMSParallellnitialMarkEnabled:表示在初始标记的时候多线程执行,缩短STW
9.-XX:+CMSParallelRemarkEnabled:在重新标记的时候多线程执行,缩短STW;
在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引用可能发生变化,多标和漏标的情况就有可能发生。这里引入“三色标记”来给大家解释下,把Gcroots可达性分析遍历对象过程中遇到的对象, 按照“是否访问过”这个条件标记成以下三种颜色:
黑色:
表示对象已经被垃圾收集器访问过, 且这个对象的所有引用都已经扫描过。 黑色的对象代表已经扫描过, 它是安全存活的, 如果有其他对象引用指向了黑色对象, 无须重新扫描一遍。 黑色对象不可能直接(不经过灰色对象) 指向某个白色对象。
灰色:
表示对象已经被垃圾收集器访问过, 但这个对象上至少存在一个引用还没有被扫描过。
白色:
表示对象尚未被垃圾收集器访问过。 显然在可达性分析刚刚开始的阶段, 所有的对象都是白色的, 若在分析结束的阶段, 仍然是白色的对象, 即代表不可达。
标记过程:
初始时,所有对象都在 【白色集合】中;
将GC Roots 直接引用到的对象 挪到 【灰色集合】中;
从灰色集合中获取对象:
3.1. 将本对象 引用到的 其他对象 全部挪到 【灰色集合】中;
3.2. 将本对象 挪到 【黑色集合】里面。
重复步骤3,直至【灰色集合】为空时结束。
结束后,仍在【白色集合】的对象即为GC Roots 不可达,可以进行回收
多标-浮动垃圾
在并发标记过程中,如果由于方法运行结束导致部分局部变量(gcroot)被销毁,这个gcroot引用的对象之前又被扫描过 (被标记为非垃圾对象),那么本轮GC不会回收这部分内存。这部分本应该回收但是没有回收到的内存,被称之为“浮动 垃圾”。浮动垃圾并不会影响垃圾回收的正确性,只是需要等到下一轮垃圾回收中才被清除。
另外,针对并发标记(还有并发清理)开始后产生的新对象,通常的做法是直接全部当成黑色,本轮不会进行清除。这部分 对象期间可能也会变为垃圾,这也算是浮动垃圾的一部分。
漏标-读写屏障
漏标只有 同时满足 以下两个条件时才会发生:
条件一:灰色对象 断开了 白色对象的引用;即灰色对象 原来成员变量的引用 发生了变化。
条件二:黑色对象 重新引用了 该白色对象;即黑色对象 成员变量增加了 新的引用。
漏标会导致被引用的对象被当成垃圾误删除,这是严重bug,必须解决,有两种解决方案: 增量更新(Incremental Update) 和原始快照(Snapshot At The Beginning,SATB) 。
增量更新 就是当黑色对象 插入新的指向 白色对象的引用关系时, 就将这个新插入的引用记录下来, 等并发扫描结束之后, 再将这些记录过的引用关系中的黑色对象为根, 重新扫描一次。 这可以简化理解为, 黑色对象一旦新插入了指向白色对象的引用之后, 它就变回灰色对象了。
原始快照 就是当灰色对象要 删除指向 白色对象的引用关系时, 就将这个要删除的引用记录下来, 在并发扫描结束之后, 再将这些记录过的引用关系中的灰色对象为根, 重新扫描一次,这样就能扫描到白色的对象,将白色对象直接标记为黑色(目的就是让这种对象在本轮gc清理中能存活下来,待下一轮gc的时候重新扫描,这个对象也有可能是浮动垃圾)
以上 无论是对引用关系记录的插入还是删除, 虚拟机的记录操作都是通过写屏障实现的。
写屏障实现原始快照(SATB): 当对象B的成员变量的引用发生变化时,比如引用消失(a.b.d = null),我们可以利用写屏障,将B原来成员变量的引用对象D记录下来:
写屏障实现增量更新: 当对象A的成员变量的引用发生变化时,比如新增引用(a.d = d),我们可以利用写屏障,将A新的成员变量引用对象D 记录下来:
记忆集
当我们进行young gc时,我们的 gc roots除了常见的栈引用、静态变量、常量、锁对象、class对象 这些常见的之外,如果 老年代有对象引用了我们的新生代对象 ,那么老年代的对象也应该加入gc roots的范围中,但是如果每次进行young gc我们都需要扫描一次老年代的话,那我们进行垃圾回收的代价实在是太大了,因此我们引入了一种叫做记忆集的抽象数据结构来记录这种引用关系。
什么是记忆集?
记忆集是一种用于记录从非收集区域指向收集区域的指针集合的数据结构。
如果我们不考虑效率和成本问题,我们可以用一个数组存储所有有指针指向新生代的老年代对象。但是如果这样的话我们维护成本就很好,打个比方,假如所有的老年代对象都有指针指向了新生代,那么我们需要维护整个老年代大小的记忆集,毫无疑问这种方法是不可取的。因此我们引入了卡表的数据结构
什么是卡表?
记忆集是我们针对于跨代引用问题提出的思想,而卡表则是针对于该种思想的具体实现。(可以理解为记忆集是结构,卡表是实现类)
在hotspot虚拟机中,卡表是一个字节数组,数组的每一项对应着内存中的某一块连续地址的区域,如果该区域中有引用指向了待回收区域的对象,卡表数组对应的元素将被置为1,没有则置为0;
G1的记忆集
上述的 卡表机制基本上适用于CMS垃圾回收器 ,因为CMS垃圾回收器只需要在young gc时维护老年代对新生代的引用即可,但是G1垃圾回收器不一样,因为G1垃圾回收器是基于分区模型的,所以每一个Region需要知道有哪些region的引用指向了它,并且这些region是不是本次垃圾回收区域的一部分。因此G1垃圾回收器不能简单的只维护一个卡表(卡表只能简单的知道某块内存区域有没有引用收集区域的对象,但是不能知道到底是谁引用了自己),所以在 G1垃圾回收器的记忆集的实现实际上是基于哈希表的 ,key代表的是其他region的起始地址,value是一集合,里面存放了对应区域的卡表的索引,因此G1的region能够通过记忆集知道,当前是哪个region有引用指向了它,并且能知道是哪块区域存在指针指向。
但是大家应该能注意到, 每个region都维护一个记忆集,内存占用量肯定很大,这也就是为什么G1垃圾回收器比传统的其他垃圾回收器要有更高的内存占用 。据统计G1至少要耗费大约10%-20%的Java堆空间来维护收集器的工作。
参考:
jvm的参数,使用CMS的情况下
-server (年轻代采用并行清理)
-XX:+UseConcMarkSweepGC (设置年老代为并发收集,激活CMS收集器)
-Duser.timezone=UTC-Xloggc:/usr/src/app/log/gc.log
-XX:+CMSClassUnloadingEnabled (年老代启用CMS,但默认是不会回收永久代(Perm)的。此处对Perm区启用类回收,防止Perm区内存满。(需要与+CMSPermGenSweepingEnabled同时启用)。)
-XX:+HeapDumpOnOutOfMemoryError (当堆出现内存错误时,保存堆快照信息)
-XX:HeapDumpPath=/usr/src/app/log/heapdump.hprof (快照地址)
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-XX:+PrintTenuringDistribution
(CMS的触发条件)
-XX:+UseCMSInitiatingOccupancyOnly (没有设置,虚拟机会根据收集的数据决定是否触发CMS,加上这个参数控制老生代使用比例是否进行CMS)
-XX:CMSInitiatingOccupancyFraction=70 (老生代使用率达到阀值,默认是92%,必须配合+UseCMSInitiatingOccupancyOnly一起使用)
-XX:+CMSParallelInitialMarkEnabled(由于CMS算法收集垃圾的第一阶段初始标记是会引起程序暂停(STW),通过这个参数可以开启并行标记,使用多个线程标记,从而减少暂停时间)
-XX:+CMSParallelRemarkEnabled (作用于CMS的第五阶段重新标记,可以开启并行标记,加快标记速度)
-XX:+CMSScavengeBeforeRemark (作用于CMS的第五阶段重新标记,加上这个参数强制在进行重新标记的时候进行一次YoungGC)
-XX:+UseFastAccessorMethods (原始类型的快速优化)
-XX:+UseCMSCompactAtFullCollection(作用于CMS的阶段六,是否打开对老生代对象的压缩,CMS默认上是不会整理堆碎片的,开启对内存整理压缩,避免产生内存碎片)
-XX:CMSFullGCsBeforeCompaction=2 (用于CMS的阶段六,如果每次进行Full GC都进行压缩处理,那就有点浪费性能了,这个参数控制每几次Full GC后进行压缩处理)
-XX:MaxMetaspaceSize=256m (这里并不能指定原数据空间的大小,设置这个值表达的意思是,当原数据空间扩容达到指定的阀值,就会触发一次Full GC,以后的扩容都会触发)
-XX:NewRatio=2 (老生代与年轻代的比值)
-XX:SurvivorRatio=8(新生代中E区和S区的比值,在新生代中S0和S1必定有一个为空)
-XX:ConGCThreads=N(控制运行CMS的线程数量,默认情况:ConcGCThreads=(3+ParallelGCThreads)/4,)
CMS(Concurrent Mark-Sweep Collector)
一:使用并发收集
二:使用的收集算法 mark-Sweep(标记清除),会产生零散碎片
CMS回收的是老生代的对象
阶段一:初始标记,重点是遍历从GCROOT直接关联的老年代对象,再就是年轻代直接关联的老年代对象
阶段二:并发标记,从上个阶段标记的对象出发,把可以到达的对象都标记上
阶段三:预清理
阶段四:可中断预处理
阶段五:重新标记
阶段六:并发清理
阶段七:并发重置
JVM常用参数
-Xmx4g 初始堆大小 4g
-Xms4g 最大堆大小4g
-Xmn512m 年轻代大小(1.4or lator)整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
-XX:MetaspaceSize=256m 设置元空间初始大小为256m
-XX:MaxMetaspaceSize=512m 设置元空间最大可分配大小512m
-Xss256k 每个线程的堆栈大小256k
-XX:+ExplicitGCInvokesConcurrent 降低每次Full GC的时间,其实就是启用多线程去执行
-XX:+UseConcMarkSweepGC 启用CMS做为垃圾收集
-XX:+UseCMSInitiatingOccupancyOnly 只有开启了这个参数,CMSInitiatingOccupancyFraction这个参数才会生效
-XX:CMSInitiatingOccupancyFraction=70 CMS垃圾收集器,当老年代达到70%时,触发CMS垃圾回收。
-XX:ParallelGCThreads=4 选项指定在默认垃圾收集器的并行操作期间使用的线程数为4
-XX:-UseBiasedLocking 关闭用户偏向锁
-XX:AutoBoxCacheMax=20000 参数是设置Integer缓存上限的参数,在VM初始化期间java.lang.Integer.IntegerCache.high属性可以被设置和保存在私有的系统属性sun.misc.VM class中。理论上讲,当系统需要频繁使用Integer时,或者说堆内存中存在大量的Integer对象时,可以考虑提高Integer缓存上限,避免JVM重复创造对象,提高内存的使用率,减少GC的频率,从而提高系统的性能。
-XX:MaxTenuringThreshold=6 设置的是年龄阈值,默认15(对象被复制的次数),这里设置成了6次
-XX:+PrintGCApplicationStoppedTime 打印垃圾收集时 , 系统的停顿时间
-XX:+PrintGCDateStamps 打印CG发生的时间戳
-XX:+PrintGCDetails 来打印详细的GC日志来查看
-XX:+PrintCodeCache 会打印Code Cache区的使用情况。
-Xloggc:/dev/shm/gc.log 指定gc的log日志所在位置/dev/shm/gc.log
-XX:+UseGCLogFileRotation 打开或关闭GC日志滚动记录功能,要求必须设置 -Xloggc参数
-XX:NumberOfGCLogFiles=2 设置滚动日志文件的个数,必须大于1
日志文件命名策略是,filename.0, filename.1, ..., filename.n-1,其中n是该参数的值
-XX:GCLogFileSize=10m 设置滚动日志文件的大小,必须大于8k
当前写日志文件大小超过该参数值时,日志将写入下一个文件
-XX:+HeapDumpOnOutOfMemoryError 表示当JVM发生OOM时,自动生成DUMP文件。
-XX:HeapDumpPath=/root/logs/ 发生了 内存溢出错误 dump路径为root/logs/ (一般与HeapDumpOnOutOfMemoryError参数一块使用)
CMS GC启动参数优化配置
java启动参数共分为三类;
其一是 标准参数 (-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
其二是 非标准参数 (-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
其三是 非Stable参数 (-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
1.设置环境变量JAVA_OPTS
2.Windows下,在/bin/catalina.bat,Unix下,在/bin/catalina.sh的前面,增加 JAVA_OPTS=’-Xms256m -Xmx512m’
Tomcat 的启动参数位于安装目录 ${TOMCAT_HOME}/bin目录下, Linux 操作系统就是 catalina.sh 文件。JAVA_OPTS,就是用来设置 JVM 相关运行参数的变量,还可以在 CATALINA_OPTS 变量中设置。关于这 2 个变量,还是多少有些区别的:
JAVA_OPTS:用于当 Java 运行时选项“start”、“stop”或“run”命令执行。
CATALINA_OPTS:用于当 Java 运行时选项“start”或“run”命令执行。
为什么有两个不同的变量?它们之间都有什么区别呢?
首先,在启动 Tomcat 时,任何指定变量的传递方式都是相同的,可以传递到执行“start”或“run”命令中,但只有设定在 JAVA_OPTS 变量里的参数被传递到“stop”命令中。对于 Tomcat 运行过程,可能没什么区别,影响的是结束程序,而不是启动程序。
第二个区别是更微妙,其他应用程序也可以使用 JAVA_OPTS 变量,但只有在 Tomcat 中使用 CATALINA_OPTS 变量。如果你设置环境变量为只使用 Tomcat,最好你会建议使用 CATALINA_OPTS 变量,而如果你设置环境变量使用其它的 Java 应用程序,例如 JBoss,你应该把你的设置放在JAVA_OPTS 变量中。
我在本地配置的:
其他暂时没用到的:
Xms与Xmx配置相同的值,为了能够在GC后不需要重新分隔计算堆区的大小而浪费资源。
JVM系列四:生产环境参数实例及分析【生产环境实例增加中】
jvm的GC日志分析
JVM常用参数配置
深入了解JVM
JVM参数与实际环境中的优化配置实践
JVM启动参数大全
Java服务GC参数调优案例
关键业务系统的JVM参数推荐(2018仲夏版)
成为Java GC专家(5)—Java性能调优原则
JVM所有参数一览
参数: AdaptivePermSizeWeight
用法:
参数: AdaptiveSizeDecrementScaleFactor
用法:
参数: AdaptiveSizeMajorGCDecayTimeScale
用法:
参数: AdaptiveSizePausePolicy
用法:
参数: AdaptiveSizePolicyCollectionCostMargin
用法:
参数: AdaptiveSizePolicyInitializingSteps
用法:
参数: AdaptiveSizePolicyOutputInterval
用法:
参数: AdaptiveSizePolicyWeight
用法:
参数: AdaptiveSizeThroughPutPolicy
用法:
参数: AdaptiveTimeWeight
用法:
参数: AdjustConcurrency
用法:
参数: AggressiveOpts
用法:
参数: AliasLevel
用法:
参数: AlignVector
用法:
参数: AllocateInstancePrefetchLines
用法:
参数: AllocatePrefetchDistance
用法:
参数: AllocatePrefetchInstr
用法:
参数: AllocatePrefetchLines
用法:
参数: AllocatePrefetchStepSize
用法:
参数: AllocatePrefetchStyle
用法:
参数: AllowJNIEnvProxy
用法:
参数: AllowNonVirtualCalls
用法:
参数: AllowParallelDefineClass
用法:
参数: AllowUserSignalHandlers
用法:
参数: AlwaysActAsServerClassMachine
用法:
参数: AlwaysCompileLoopMethods
用法:
参数: AlwaysLockClassLoader
用法:
参数: AlwaysPreTouch
用法: -XX:+AlwaysPreTouch
参数: AlwaysRestoreFPU
用法:
参数: AlwaysTenure
用法:
参数: AssertOnSuspendWaitFailure
用法:
参数: AssumeMP
用法:
参数: Atomics
用法:
参数: AutoBoxCacheMax
用法: -XX:AutoBoxCacheMax=128
参数: AutoGCSelectPauseMillis
用法:
参数: BCEATraceLevel
用法:
参数: BackEdgeThreshold
用法:
参数: BackgroundCompilation
用法:
参数: BaseFootPrintEstimate
用法:
参数: BiasedLockingBulkRebiasThreshold
用法:
参数: BiasedLockingBulkRevokeThreshold
用法:
参数: BiasedLockingDecayTime
用法:
参数: BiasedLockingStartupDelay
用法:
参数: BindCMSThreadToCPU
用法:
参数: BindGCTaskThreadsToCPUs
用法:
参数: BlockLayoutByFrequency
用法:
参数: BlockLayoutMinDiamondPercentage
用法:
参数: BlockLayoutRotateLoops
用法:
参数: BlockOffsetArrayUseUnallocatedBlock
用法:
参数: BranchOnRegister
用法:
参数: BytecodeVerificationLocal
用法:
参数: BytecodeVerificationRemote
用法:
参数: C1OptimizeVirtualCallProfiling
用法:
参数: C1PatchInvokeDynamic
用法:
参数: C1ProfileBranches
用法:
参数: C1ProfileCalls
用法:
参数: C1ProfileCheckcasts
用法:
参数: C1ProfileInlinedCalls
用法:
参数: C1ProfileVirtualCalls
用法:
参数: C1UpdateMethodData
用法:
参数: CICompilerCount
用法:
参数: CICompilerCountPerCPU
用法:
参数: CITime
用法:
参数: CMSAbortSemantics
用法:
参数: CMSAbortablePrecleanMinWorkPerIteration
用法:
参数: CMSAbortablePrecleanWaitMillis
用法:
参数: CMSBitMapYieldQuantum
用法:
参数: CMSBootstrapOccupancy
用法:
参数: CMSClassUnloadingEnabled
用法:
参数: CMSClassUnloadingMaxInterval
用法:
参数: CMSCleanOnEnter
用法:
参数: CMSCompactWhenClearAllSoftRefs
用法:
参数: CMSConcMarkMultiple
用法:
参数: CMSConcurrentMTEnabled
用法:
参数: CMSCoordinatorYieldSleepCount
用法:
参数: CMSDumpAtPromotionFailure
用法:
参数: CMSEdenChunksRecordAlways
用法:
参数: CMSExpAvgFactor
用法:
参数: CMSExtrapolateSweep
用法:
参数: CMSFullGCsBeforeCompaction
用法: -XX:CMSFullGCsBeforeCompaction=0
参数: CMSIncrementalDutyCycle
用法:
参数: CMSIncrementalDutyCycleMin
用法:
参数: CMSIncrementalMode
用法:
参数: CMSIncrementalOffset
用法:
参数: CMSIncrementalPacing
用法:
参数: CMSIncrementalSafetyFactor
用法:
参数: CMSIndexedFreeListReplenish
用法:
参数: CMSInitiatingOccupancyFraction
用法: -XX:CMSInitiatingOccupancyFraction=75
参数: CMSInitiatingPermOccupancyFraction
用法:
参数: CMSIsTooFullPercentage
用法:
参数: CMSLargeCoalSurplusPercent
用法:
参数: CMSLargeSplitSurplusPercent
用法:
参数: CMSLoopWarn
用法:
参数: CMSMaxAbortablePrecleanLoops
用法: -XX:CMSMaxAbortablePrecleanLoops=0
参数: CMSMaxAbortablePrecleanTime
用法: -XX:CMSMaxAbortablePrecleanTime=5000
参数: CMSOldPLABMax
用法:
参数: CMSOldPLABMin
用法:
参数: CMSOldPLABNumRefills
用法:
参数: CMSOldPLABReactivityFactor
用法:
参数: CMSOldPLABResizeQuicker
用法:
参数: CMSOldPLABToleranceFactor
用法:
参数: CMSPLABRecordAlways
用法:
参数: CMSParPromoteBlocksToClaim
用法:
参数: CMSParallelInitialMarkEnabled
用法: -XX:+CMSParallelInitialMarkEnabled
参数: CMSParallelRemarkEnabled
用法: -XX:+CMSParallelRemarkEnabled
参数: CMSParallelSurvivorRemarkEnabled
用法:
参数: CMSPermGenPrecleaningEnabled
用法:
参数: CMSPrecleanDenominator
用法:
参数: CMSPrecleanIter
用法:
参数: CMSPrecleanNumerator
用法:
参数: CMSPrecleanRefLists1
用法:
参数: CMSPrecleanRefLists2
用法:
参数: CMSPrecleanSurvivors1
用法:
参数: CMSPrecleanSurvivors2
用法:
参数: CMSPrecleanThreshold
用法:
参数: CMSPrecleaningEnabled
用法:
参数: CMSPrintChunksInDump
用法:
参数: CMSPrintEdenSurvivorChunks
用法:
参数: CMSPrintObjectsInDump
用法:
参数: CMSRemarkVerifyVariant
用法:
参数: CMSReplenishIntermediate
用法:
参数: CMSRescanMultiple
用法:
参数: CMSRevisitStackSize
用法:
参数: CMSSamplingGrain
用法:
参数: CMSScavengeBeforeRemark
用法: -XX:+CMSScavengeBeforeRemark
参数: CMSScheduleRemarkEdenPenetration
用法: -XX:CMSScheduleRemarkEdenPenetration=50
参数: CMSScheduleRemarkEdenSizeThreshold
用法: -XX:CMSScheduleRemarkEdenSizeThreshold=2097152
参数: CMSScheduleRemarkSamplingRatio
用法:
参数: CMSSmallCoalSurplusPercent
用法:
参数: CMSSmallSplitSurplusPercent
用法:
参数: CMSSplitIndexedFreeListBlocks
用法:
参数: CMSTriggerPermRatio
用法:
参数: CMSTriggerInterval
用法:
参数: CMSTriggerRatio
用法:
参数: CMSWaitDuration
用法: -XX:CMSWaitDuration=2000
参数: CMSWorkQueueDrainThreshold
用法:
参数: CMSYield
用法:
参数: CMSYieldSleepCount
用法:
参数: CMSYoungGenPerWorker
用法:
参数: CMS_FLSPadding
用法:
参数: CMS_FLSWeight
用法:
参数: CMS_SweepPadding
用法:
参数: CMS_SweepTimerThresholdMillis
用法:
参数: CMS_SweepWeight
用法:
参数: CPUForCMSThread
用法:
参数: CheckEndorsedAndExtDirs
用法:
参数: CheckJNICalls
用法:
参数: ClassUnloading
用法:
参数: ClassUnloadingWithConcurrentMark
用法:
参数: ClearFPUAtPark
用法:
参数: ClipInlining
用法:
参数: CodeCacheExpansionSize
用法:
参数: CodeCacheFlushingMinimumFreeSpace
用法:
参数: CodeCacheMinimumFreeSpace
用法:
参数: CollectGen0First
用法:
参数: CompactFields
用法:
参数: CompilationPolicyChoice
用法:
参数: CompilationRepeat
用法:
参数: CompileCommand
用法:
参数: CompileCommandFile
用法:
参数: CompileOnly
用法:
参数: CompileThreshold
用法:
参数: CompilerThreadHintNoPreempt
用法:
参数: CompilerThreadPriority
用法:
参数: CompilerThreadStackSize
用法:
参数: CompressedClassSpaceSize
用法:
参数: ConcGCThreads
用法: -XX:ConcGCThreads=4
参数: ConditionalMoveLimit
用法:
参数: ContendedPaddingWidth
用法:
参数: ConvertSleepToYield
用法:
参数: ConvertYieldToSleep
用法:
参数: CrashOnOutOfMemoryError
用法:
参数: CreateMinidumpOnCrash
用法:
参数: CriticalJNINatives
用法:
参数: DTraceAllocProbes
用法:
参数: DTraceMethodProbes
用法:
参数: DTraceMonitorProbes
用法:
参数: DebugInlinedCalls
用法:
参数: DebugNonSafepoints
用法:
参数: Debugging
用法:
参数: DefaultMaxRAMFraction
用法:
参数: DefaultThreadPriority
用法:
参数: DeferInitialCardMark
用法:
参数: DeferPollingPageLoopCount
用法:
参数: DeferThrSuspendLoopCount
用法:
参数: DeoptimizeRandom
用法:
参数: DisableAttachMechanism
用法:
参数: DisableExplicitGC
用法: -XX:+DisableExplicitGC
参数: DisableIntrinsic
用法:
参数: DisplayVMOutput
用法:
参数: DisplayVMOutputToStderr
用法:
参数: DisplayVMOutputToStdout
用法:
参数: DoEscapeAnalysis
用法: -XX:+DoEscapeAnalysis
参数: DominatorSearchLimit
用法:
参数: DontCompileHugeMethods
用法:
参数: DontYieldALot
用法:
参数: DumpLoadedClassList
用法:
参数: DumpReplayDataOnError
用法:
参数: DumpSharedSpaces
用法:
参数: EagerXrunInit
用法:
参数: EliminateAllocationArraySizeLimit
用法:
参数: EliminateAllocations
用法:
参数: EliminateAutoBox
用法:
参数: EliminateLocks
用法:
参数: EliminateNestedLocks
用法:
参数: EmitSync
用法:
参数: EnableContended
用法:
参数: EnableInvokeDynamic
用法:
参数: EnableResourceManagementTLABCache
用法:
参数: EnableSharedLookupCache
用法:
参数: EnableTracing
用法:
参数: ErgoHeapSizeLimit
用法:
参数: ErrorFile
用法:
参数: ErrorReportServer
用法:
参数: EscapeAnalysisTimeout
用法:
参数: EstimateArgEscape
用法:
参数: ExitOnOutOfMemoryError
用法:
参数: ExplicitGCInvokesConcurrent
用法: -XX:+ExplicitGCInvokesConcurrent
参数: ExplicitGCInvokesConcurrentAndUnloadsClasses
用法:
参数: ExtendedDTraceProbes
用法:
参数: ExtraSharedClassListFile
用法:
参数: FLSAlwaysCoalesceLarge
用法:
参数: FLSCoalescePolicy
用法:
参数: FLSLargestBlockCoalesceProximity
用法:
参数: FLSVerifyAllHeapReferences
用法:
参数: FLSVerifyIndexTable
用法:
参数: FLSVerifyLists
用法:
参数: FailOverToOldVerifier
用法:
参数: FastTLABRefill
用法:
参数: FenceInstruction
用法:
参数: FieldsAllocationStyle
用法:
参数: FilterSpuriousWakeups
用法:
参数: FlightRecorderOptions
用法:
参数: FoldStableValues
用法:
参数: ForceDynamicNumberOfGCThreads
用法:
参数: ForceNUMA
用法:
参数: ForceTimeHighResolution
用法:
参数: ForceUnreachable
用法:
参数: FreqInlineSize
用法:
参数: G1ConcMarkStepDurationMillis
用法:
参数: G1ConcRSHotCardLimit
用法:
参数: G1ConcRSLogCacheSize
用法:
参数: G1ConcRefinementGreenZone
用法:
参数: G1ConcRefinementRedZone
用法:
参数: G1ConcRefinementServiceIntervalMillis
用法:
参数: G1ConcRefinementThreads
用法:
参数: G1ConcRefinementThresholdStep
用法:
参数: G1ConcRefinementYellowZone
用法:
参数: G1ConfidencePercent
用法:
参数: G1HeapRegionSize
用法: -XX:G1HeapRegionSize=4m
参数: G1HeapWastePercent
用法:
参数: G1MixedGCCountTarget
用法:
参数: G1PrintHeapRegions
用法:
参数: G1PrintRegionLivenessInfo
用法:
参数: G1RSetRegionEntries
用法:
参数: G1RSetScanBlockSize
用法:
参数: G1RSetSparseRegionEntries
用法:
参数: G1RSetUpdatingPauseTimePercent
用法:
参数: G1RefProcDrainInterval
用法:
参数: G1ReservePercent
用法:
参数: G1SATBBufferEnqueueingThresholdPercent
用法:
参数: G1SATBBufferSize
用法:
参数: G1SummarizeConcMark
用法:
参数: G1SummarizeRSetStats
用法:
参数: G1SummarizeRSetStatsPeriod
用法:
参数: G1TraceConcRefinement
用法:
参数: G1UpdateBufferSize
用法:
参数: G1UseAdaptiveConcRefinement
用法:
参数: G1VerifyHeapRegionCodeRoots
用法:
参数: G1VerifyRSetsDuringFullGC
用法:
参数: GCDrainStackTargetSize
用法:
参数: GCHeapFreeLimit
用法:
参数: GCLockerEdenExpansionPercent
用法:
参数: GCLockerInvokesConcurrent
用法:
参数: GCLockerRetryAllocationCount
用法:
参数: GCLogFileSize
用法: -XX:GCLogFileSize=256m
参数: GCParallelVerificationEnabled
用法:
参数: GCPauseIntervalMillis
用法:
参数: GCTaskTimeStampEntries
用法:
参数: GCTimeLimit
用法:
参数: GCTimeRatio
用法:
参数: GuaranteedSafepointInterval
用法:
参数: HeapBaseMinAddress
用法:
参数: HeapDumpAfterFullGC
用法: -XX:+HeapDumpAfterFullGC
参数: HeapDumpBeforeFullGC
用法: -XX:+HeapDumpBeforeFullGC
参数: HeapDumpOnOutOfMemoryError
用法: -XX:+HeapDumpOnOutOfMemoryError
参数: HeapDumpPath
用法: -XX:HeapDumpPath=${目录}
参数: HeapFirstMaximumCompactionCount
用法:
参数: HeapMaximumCompactionInterval
用法:
参数: HeapSizePerGCThread
用法:
参数: IgnoreEmptyClassPaths
用法: -XX:IgnoreEmptyClassPaths
参数: IgnoreUnrecognizedVMOptions
用法:
参数: IgnoreUnverifiableClassesDuringDump
用法:
参数: IncreaseFirstTierCompileThresholdAt
用法:
参数: IncrementalInline
用法:
参数: InitialBootClassLoaderMetaspaceSize
用法:
参数: InitialCodeCacheSize
用法:
参数: InitialHeapSize
用法:
参数: InitialRAMFraction
用法:
参数: InitialSurvivorRatio
用法:
参数: InitialTenuringThreshold
用法:
参数: InitiatingHeapOccupancyPercent
用法:
参数: Inline
用法:
参数: InlineDataFile
用法:
参数: InlineSmallCode
用法:
参数: InlineSynchronizedMethods
用法:
参数: InsertMemBarAfterArraycopy
用法:
参数: InteriorEntryAlignment
用法:
参数: InterpreterProfilePercentage
用法:
参数: JNIDetachReleasesMonitors
用法:
参数: JavaMonitorsInStackTrace
用法:
参数: JavaPriority10_To_OSPriority
用法:
参数: JavaPriority1_To_OSPriority
用法:
参数: JavaPriority2_To_OSPriority
用法:
参数: JavaPriority3_To_OSPriority
用法:
参数: JavaPriority4_To_OSPriority
用法:
参数: JavaPriority5_To_OSPriority
用法:
参数: JavaPriority6_To_OSPriority
用法:
参数: JavaPriority7_To_OSPriority
用法:
参数: JavaPriority8_To_OSPriority
用法:
参数: JavaPriority9_To_OSPriority
用法:
参数: LIRFillDelaySlots
用法:
参数: LargePageHeapSizeThreshold
用法:
参数: LargePageSizeInBytes
用法:
参数: LazyBootClassLoader
用法:
参数: LiveNodeCountInliningCutoff
用法:
参数: LoadExecStackDllInVMThread
用法:
参数: LogCommercialFeatures
用法:
参数: LogCompilation
用法:
参数: LogEvents
用法:
参数: LogEventsBufferEntries
用法:
参数: LogFile
用法:
参数: LogVMOutput
用法:
参数: LoopLimitCheck
用法:
参数: LoopMaxUnroll
用法:
参数: LoopOptsCount
用法:
参数: LoopUnrollLimit
用法:
参数: LoopUnrollMin
用法:
参数: LoopUnswitching
用法:
参数: MallocMaxTestWords
用法:
参数: MallocVerifyInterval
用法:
参数: MallocVerifyStart
用法:
参数: ManagementServer
用法:
参数: MarkStackSize
用法:
参数: MarkStackSizeMax
用法:
参数: MarkSweepAlwaysCompactCount
用法:
参数: MarkSweepDeadRatio
用法:
参数: MaxBCEAEstimateLevel
用法:
参数: MaxBCEAEstimateSize
用法:
参数: MaxDirectMemorySize
用法: -XX:MaxDirectMemorySize=1024m
参数: MaxFDLimit
用法:
参数: MaxGCMinorPauseMillis
用法:
参数: MaxGCPauseMillis
用法: -XX:MaxGCPauseMillis=200
参数: MaxHeapFreeRatio
用法:
参数: MaxHeapSize
用法:
参数: MaxInlineLevel
用法:
参数: MaxInlineSize
用法: -XX:MaxInlineSize=35
参数: MaxJNILocalCapacity
用法:
参数: MaxJavaStackTraceDepth
用法: -XX:MaxJavaStackTraceDepth=1024
参数: MaxJumpTableSize
用法:
参数: MaxJumpTableSparseness
用法:
参数: MaxLabelRootDepth
用法:
参数: MaxLoopPad
用法:
参数: MaxMetaspaceExpansion
用法:
参数: MaxMetaspaceFreeRatio
用法:
参数: MaxMetaspaceSize
用法:
参数: MaxNewSize
用法:
参数: MaxNodeLimit
用法:
参数: MaxPermHeapExpansion
用法:
参数: MaxPermSize
用法: -XX:MaxPermSize=128m
参数: MaxRAM
用法:
参数: MaxRAMFraction
用法:
参数: MaxRecursiveInlineLevel
用法:
参数: MaxTenuringThreshold
用法:
参数: MaxTrivialSize
用法:
参数: MaxVectorSize
用法:
参数: MetaspaceSize
用法: -XX:MetaspaceSize=128m
参数: MethodFlushing
用法:
参数: MinCodeCacheFlushingInterval
用法:
参数: MinHeapDeltaBytes
用法:
参数: MinHeapFreeRatio
用法:
参数: MinInliningThreshold
用法:
参数: MinJumpTableSize
用法:
参数: MinPermHeapExpansion
用法:
参数: MinMetaspaceExpansion
用法:
参数: MinMetaspaceFreeRatio
用法:
参数: MinRAMFraction
用法:
参数: MinSurvivorRatio
用法:
参数: MinTLABSize
用法:
参数: MonitorBound
用法:
参数: MonitorInUseLists
用法:
参数: MultiArrayExpandLimit
用法:
参数: MustCallLoadClassInternal
用法:
参数: NUMAChunkResizeWeight
用法:
参数: NUMAInterleaveGranularity
用法:
参数: NUMAPageScanRate
用法:
参数: NUMASpaceResizeRate
用法:
参数: NUMAStats
用法:
参数: NativeMemoryTracking
用法:
参数: NeedsDeoptSuspend
用法:
参数: NeverActAsServerClassMachine
用法:
参数: NeverTenure
用法:
参数: NewRatio
用法: -XX:NewRatio=2
参数: NewSize
用法:
参数: NewSizeThreadIncrease
用法:
参数: NmethodSweepActivity
用法:
参数: NmethodSweepCheckInterval
用法:
参数: NmethodSweepFraction
用法:
参数: NodeLimitFudgeFactor
用法:
参数: NumberOfGCLogFiles
用法: -XX:NumberOfGCLogFiles=16
参数: NumberOfLoopInstrToAlign
用法:
参数: ObjectAlignmentInBytes
用法:
参数: OldPLABSize
用法:
参数: OldPLABWeight
用法:
参数: OldSize
用法:
参数: OmitStackTraceInFastThrow
用法: -XX:-OmitStackTraceInFastThrow
参数: OnError
用法: -XX:OnError="pmap %p",或者-XX:OnError="gcore %p; dbx - %p"
参数: OnOutOfMemoryError
用法:
参数: OnStackReplacePercentage
用法:
参数: OptimizeExpensiveOps
用法:
参数: Optim
一文彻底搞懂 CMS GC 参数配置
近期整理多个 HBase 集群的 JVM 参数,发现都是默认的 CMS GC 配置,如何调优 JVM 参数就成了一个绕不过的话题。因此,为了寻求一个 CMS GC 的 JVM 合理参数配置,笔者参考多篇社区文章及相关博客,总结了一些 CMS 相关的知识点,以及一套基于 CMS 的 JVM 参数配置。
CMS(Concurrent Mark Sweep,并发-标记-清除)是目前最常用的 JVM 垃圾回收器,这里不解释 CMS 的工作过程,只记录一些基础要点以帮助理解后面的内容:
经过理解各个参数的含义及取值影响,总结了以下的 JVM 参数配置,可以几乎不用调整使用:
如果是 64G 及以上的大堆,-Xmn 可以调整到2g,其他参数不变或微调。下面对一些重要的 JVM 参数介绍说明。
以下参数解析都建立在使用 CMS GC 策略基础上,这里使用 CMS GC 表示老年代垃圾回收,Young GC 表示新生代垃圾回收。
① -Xmx, -Xms, -Xmn
-Xmx、-Xms 分别表示 JVM 堆的最大值,初始化大小。-Xmx 等价于-XX:MaxHeapSize,-Xms 等价于-XX:InitialHeapSize。
-Xmn表示新生代大小,等价于-XX:MaxNewSize、-XX:NewSize,这个参数的设置对 GC 性能影响较大,设置小了会影响 CMS GC 性能,设置大了会影响 Young GC 性能,建议取值范围在1~3g,比如32g堆大小时可以设为1g,64g堆大小时可以设为2g,通常性能会比较高。
② -Xss
表示线程栈的大小,等价于-XX:ThreadStackSize,默认1M,一般使用不了这么多,建议值256k。
③ -XX:SurvivorRatio
新生代中 Eden 区与 Survivor 区的比值,默认8,这个参数设置过大会导致 CMS GC 耗时过长,建议调小,使得短寿对象在Young区可以被充分回收,减少晋升到Old区的对象数量,以此提升 CMS GC 性能。
④ -XX:+UseParNewGC, -XX:+UseConcMarkSweepGC
分别表示使用并行收集器 ParNew 对新生代进行垃圾回收,使用并发标记清除收集器 CMS 对老年代进行垃圾回收。
⑤ -XX:ParallelGCThreads, -XX:ParallelCMSThreads
分别表示 Young GC 与 CMS GC 工作时的并行线程数,建议根据处理器数量进行合理设置。
⑥ -XX:MaxTenuringThreshold
对象从新生代晋升到老年代的年龄阈值(每次 Young GC 留下来的对象年龄加一),默认值15,表示对象要经过15次 GC 才能从新生代晋升到老年代。设置太小会严重影响 CMS GC 性能,建议默认值即可。
⑦ -XX:+UseCMSCompactAtFullCollection
由于 CMS GC 会产生内存碎片,且只在 Full GC 时才会进行内存碎片压缩(因此 使用 CMS 垃圾回收器避免不了 Full GC)。这个参数表示开启 Full GC 时的压缩功能,减少内存碎片。
⑧ -XX:+UseCMSInitiatingOccupancyOnly , -XX:CMSInitiatingOccupancyFraction
-XX:CMSInitiatingOccupancyFraction 表示触发 CMS GC 的老年代使用阈值,一般设置为 70~80(百分比),设置太小会增加 CMS GC 发现的频率,设置太大可能会导致并发模式失败或晋升失败。默认为 -1,表示 CMS GC 会由 JVM 自动触发。
-XX:+UseCMSInitiatingOccupancyOnly 表示 CMS GC 只基于 CMSInitiatingOccupancyFraction 触发,如果未设置该参数则 JVM 只会根据 CMSInitiatingOccupancyFraction 触发第一次 CMS GC ,后续还是会自动触发。建议同时设置这两个参数。
⑨ -XX:+CMSClassUnloadingEnabled
表示开启 CMS 对永久代的垃圾回收(或元空间),避免由于永久代空间耗尽带来 Full GC。
在线工具
GC在线参数检查与优化:
GC在线日志分析:
参考文档
目前我们主要使用 CMS,其实比较大的heap建议使用 G1 垃圾回收器,关于 G1 后文我们会进行介绍总结。欢迎留下你的见解。
往期文章精选
◆ Apache Hudi 0.5.1版本重磅发布
◆ 贝壳找房基于 Flink 的实时平台建设
◆ 网易基于 HBase 的最佳实践
◆ 小米流式平台架构演进与实践
如果您喜欢这篇文章,点【在看】与转发都是一种鼓励,期待得到您的认可 ❥(^_-)
javacms参数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java中参数是什么、javacms参数的信息别忘了在本站进行查找喔。