「javacms参数」java中参数是什么

博主:adminadmin 2023-03-21 11:21:09 687

本篇文章给大家谈谈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参数的信息别忘了在本站进行查找喔。