JVM参数总结

参数

描述

UseSeialGC

虚拟机运行在client模式下的默认值;使用Serial+SerialOld的收集器组合进行内存回收

UseParNewGC

使用ParNew+SerialOld的收集器组合进行内存回收

UseConcMarkSweepGC

使用ParNew+CMS+SerialOld的收集器组合进行内存回收,SerialOld收集器做为CMS收集器出现ConcurrentModeFailure失败后的后备收集器使用

UseParGC

虚拟机做为server模式下的默认值;使用PararrelScavenge+SerialOld的收集器组合进行内存回收

UseParallelOldGC

使用ParallelScavengl+ParallelOld的收集器组合进行内存回收

SurvivorRadio

新生代中Eden区域和Survivor区域的容量比例,默认8,代表Eden:Survivor=8:1

PretenureSizeThreshold

直接晋升到老年代的对象大小

MaxTenuringThreshold

晋升到老年代的对象年龄

UseAdaptiveSizePolicy

动态调整Java堆中各个区域的大小以及进入老年代的年龄

HandlePromotionFailure

是否允许分配担保失败,即老年代的剩余空间不足应付新生代的整个Eden和Survivor区的所有对象都存活的极端情况

ParallelGCThreads

设置并行GC时进行内存回收的线程数

GCTime

GC时间占总时间的比率,默认99,即允许1%的GC时间。仅在ParallelScavenge收集器时生效

MaxGcPauseMillis

设置GC的最大停顿时间。仅在ParallelScavenge收集器时生效

CMSInitiatingOccupancyFraction

设置CMS收集器在老年代空间被使用多少后触发垃圾收集。默认值为68%,仅在使用CMS收集器时生效

UseCMSCompactAtFullCollection

设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片整理。仅在使用CMS收集器时生效

CMSFullGCsBeforeCompaction

设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片整理。仅在使用CMS收集器时生效

Xmx2g

JVM最大可用内存为2g

Xms2g

JVM初始内存2g,避免gc后JVM动态分配内存

Xmn1g

JVM年轻代大小

Xss256k

每个线程的堆栈大小

-XX:PermSize

永久代初始值

-XX:MaxPermSize

永久代最大值

-XX:+PrintGC

输出形式: [GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs]

-XX:+PrintGCDetails

输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs][GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]

-XX:+PrintGCTimeStamps

可与-XX:+PrintGC -XX:+PrintGCDetails混合使用 输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]

XX:+PrintGCApplicationStoppedTime

输出形式:Total time for which application threads were stopped: 0.0468229 seconds

-Xloggc:filename

把相关日志信息记录到文件以便分析

-XX:+PrintTLAB

JVM调优

  1. -Xmx3g -Xms3g -Xmn1g -Xss256k
    -Xmx3g -Xms3g,将JVM最大内存与初始内存设置相等,避免JVM垃圾回收后重新分配内存;-Xmn1g,年轻代Sun官方推荐配置为整个堆的3/8,通常设置为1/3或1/4;-Xss256k,减小每条线程的堆栈大小,能生成更多的线程。
  2. -XX:NewRatio=4
    调整年轻代与年老代比例(年轻代:年老代=1:4)
  3. -XX:MaxTenuringThreshold=0
    设置晋升到老年代的对象年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制。
  4. UseConcMarkSweepGC
    JVM在server模式下默认使用PararrelScavenge+SerialOld的收集器组合进行内存回收,不支持与用户线程并发执行。可使用ParNew+CMS+SerialOld的收集器组合进行内存回收(SerialOld收集器做为CMS收集器出现ConcurrentModeFailure失败后的后备收集器使用),减少stop-the-world时间。
  5. -XX:CMSFullGCsBeforeCompaction
    使用CMS时,设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片整理。