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