JVM调优参数
ParNew+CMS垃圾回收器参数
参数 | 描述 |
---|---|
-Xms -XX:InitialHeapSize | java堆内存大小 |
-Xmx -XX:MaxHeapSize | java堆内存最大大小 |
-Xmn | java堆内存中新生代大小,扣除新生代剩下的就是老年代内存大小 |
-XX:NewSize | 初始新生代大小 |
-XX:MaxNewSize | 最大新生代大小 |
-XX:PermSize -XX:MetaspaceSize | 永久代大小 |
-XX:MaxPermSize -XX:MaxMetaspaceSize | 永久代最大大小 |
-Xss | 每个线程的栈内存大小 |
-XX:MaxTenuringThreshold | 设置新生代GC进老年代的年龄,默认是15 |
-XX:TargetSurvivorRatio | 目标存活率,用于动态年龄判断,默认50% |
-XX:PretenureSizeThreshold | 大对象直接进入老年代 |
-XX:SurvivorRatio | 设置eden和survivor大小比例 |
-XX:+UseParNewGC | 使用ParNew垃圾回收器对新生代进行回收 |
-XX:ParallelGCThreads | 设置垃圾回收器使用线程的数量,一般不要手动设置这个参数,默认跟机器核数相同就可以了 |
-XX:CMSInitiatingOccupancyFaction | 设置老年代占用多少比例时触发CMS,jkd1.6里默认是92%,用来存放并发清理时新移到老年代的对象,这里面就有浮动垃圾 |
-XX:+UseCMSInitiatingOccupancyOnly | 和上一个参数配套使用,如果不加这个,就只有第一次是92%,加了这个参数就可以保证每次92%的时候都进行GC |
-XX:+UseCMSCompactAtFullCollection | 这个是默认就打开了的,意思是Full GC以后要再次Stop the World,进行内存整理,避免内存碎片 |
-XX:CMSFullGCsBeforeCompaction | 意思是执行多次Full GC后再执行一次内存整理,默认是0,就表示每次Full GC后都再进行一次内存整理 |
-XX:+CMSParallelInitialMarkEnabled | 这个参数会在CMS初始化标记阶段开启多线程并发执行,减少STW |
-XX:+CMSScavengeBeforeRemark | 这个参数会在CMS重新标记阶段之前,先尽量进行一次Young GC |
-XX:+CMSParallelRemarkEnabled | CMS重新标记的时候开启多线程并发执行,减少STW |
-XX:+DisableExplicitGC | 这个参数是禁止显示执行GC,不允许通过代码触发GC |
-XX:HeapDumpOnOutOfMemoryError | OOM的时候自动dump一份内存快照 |
-XX:HeapDumpPath=/usr/local/app/oom | 指定dump内存快照存放地址 |
-XX:+PrintGCDetails | 打印详细的GC日志 |
-XX:+PrintGCTimeStamps | 这个参数可以打印每次GC发生的时间 |
-Xloggc:gc.log | 这个参数可以设置,将gc日志写入磁盘文件 |
-XX:+PrintHeapAtGC | 在每次GC前都要GC堆的概况输出 |
下面的参数不常用 | |
-XX:-HandlePromotionFailure | 新生代所有对象大小超过老年代剩余空间时会验证这个参数,决定是否比较之前进入老年代的活对象的平均大小(空间担保规则,jdk1.6之后默认开启) |
-XX:+TraceClassLoading | 追踪类加载的情况,会通过日志打印出来JVM加载了哪些类 |
-XX:+TraceClassUnloading | 追踪类卸载的情况,会通过日志打印出来JVM卸载了哪些类 |
-XX:SoftRefLRUPolicyMSPerMB | 代表每MB空闲内存空间可以允许SoftReference对象存活多久,默认1000(次参数一般采用默认,如果被误设为0,高负载时会导致动态代理生成的类吃掉Metaspace内存,导致原空间OOM) |
G1垃圾回收器参数
参数 | 描述 |
---|---|
-XX:UseG1GC | 指定使用G1垃圾回收器 |
-XX:G1HeapRegionSize=2M | 指定每个Region大小,一般不指定,使用默认的(内存/2048) |
-XX:G1NewSizePercent | 指定新生代占堆内存初始百分比大小,一般使用默认值5% |
-XX:G1MaxNewSizePercent | 设置新生代占堆内存最大的百分比大小,一般使用默认值60% |
-XX:SurvivorRatio=8 | eden和survivor比例,在G1回收器中依然可以使用 |
-XX:MaxGCPauseMills | 设置G1执行GC最多可以让系统停顿的时间,默认值是200ms(这个参数是G1垃圾回收器最重要的参数) |
-XX:MasTenuringThreshold | 设置进入老年代的年龄(G1也是可以使用的) |
-XX:InitiatingHeapOccupancyPercent | 设置老年代占堆内存多少比例时,触发新生代老年代混合回收,默认是45% |
-XX:G1MixedGCCountTarget | 设置一次回收过程中最后一步混合回收执行几次,默认8次 |
-XX:G1HeapWastePercent | 设置空出来多少百分比的Region时,混合回收就停止执行,默认5% |
-XX:G1MixedGCLiveThresholdPercent | 设置回收Region时,存活对象低于多少百分比的Region才可以回收,默认是85%。如果内存不够了也会强制执行超过85%的Region |