最常用的JVM调优参数

简单说明

参数的使用方式

  1. -XX:+<option>开启option参数,如:-XX:+UseParNew
  2. -XX:-<option>关闭option参数,如:-XX:-UseParallelGC
  3. -XX:<option>=<value>将option参数设置为value,如:-XX:NewRatio=4

除上面三种方式还有:

-Xms1024M设置最小堆内存为1024M
-Xmx1024M设置最大堆内存为1024M
-Xmn256M设置年轻代的大小为256M
-Xss254K设置每个线程的堆栈大小,在相同的物理内存下,减少这个值能生成更多的线程

内存管理

注意:现在由于硬件的性能比较以前已经有了很大幅度的提升,因此我们通常安装的都是Server模式的JDK,可以通过java -version查看具体当前运行的JVM模式。

参数 默认值 使用方式
ExplicitGCInvokesConcurrent 默认关闭 当收到来自System.gc()方法提交的垃圾收集申请时,使用CMS收集器进行收集
UseParNew 默认关闭

打开后,使用ParNew+Serial Old的收集组合方式进行内存回收,-XX:+UseParallelGC

(现在的硬件基本都是多核多线程CPU了,因此这种单线程方式基本不会再用了) 

UseConcMarkSweepGC 默认关闭 打开后,使用ParNew+CMS+Serial Old的收集组合进行内存回收。Serial Old作为CMS的后备收集器,如果CMS收集器出现Concurrent Mode Failure,则使用Serial Old进行老年代的回收。-XX:+UseConcMarkSweepGC
UseParallelGC Server模式的虚拟机默认开启,其他模式关闭 使用Parallel Scavenge+Serial Old的收集器组合进行内存回收
UseParallelOldGC 默认关闭 打开后,使用Parallel Scavenge+Parallel Old的收集器组合进行内存回收
SurvivorRatio 默认值为8 新生代中,Eden去和一个Survivor区的容量比值,-XX:SurvivorRatio=8,则Eden区占新生代容量的比例就为 8/(8+1+1)即80%
PretenureSizeThreshold 无默认值 直接进入老年代的对象大小,设置这个参数后,大于这个参数的对象称为大对象,将直接进入老年代分配。-XX:PretenureSizeThreshold=1000,对象超过1000个字节将直接进入老年代分配
MaxTenuringThreshold 默认15

晋升到老年代的年龄,每个对象在坚持过一次MinorGC后,年龄增加1。

--XX:MaxTenuringThreshold=10,新生代对象年龄达到10后进入老年代

UseAdaptiveSizePolicy 默认开启 动态调整Java堆中各个区域的大小及进入老年代的年龄,此参数是Parallel Scavenge收集器的参数,因此只有当UseParallelGC开启,此参数才生效。当开启此参数后,不需要指定新生代大小(-Xmn),Eden区域Survivor区的比例(-XX:SurvivorRatio),晋升老年代对象大小(-XX:PretenureSizeThreshold)等细节参数了
HandlePromotionFailure JDK1.6默认开启 是否允许空间分配担保失败
ParallelGCThreads 无准确的默认值 设置并行GC时进行内存回收的线程数,cpu个数小于等于8个时,默认值为cpu个数,当CPU个数大于8个时,默认值比CPU个数小
GCTimeRatio 默认值99 GC时间占总时间的比率,默认值为99,即允许1%的GC时间。仅在使用Parallel Scavenge收集器时生效
MaxGCPauseMillis 无默认值 设置GC的最大停顿时间。仅在使用Parallel Scavenge时生效
CMSInitiatingOccupancy 默认值68 设置CMS收集器在老年代空间被使用多少后触发垃圾收集,仅在使用CMS收集器时生效
UseCMSCompactAtFullCollection 默认开启 设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片整理。仅在CMS收集器时生效
CMSFullGCsBeforeCompaction 无默认值 设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片整理。仅在使用CMS收集器时生效
ScavengeBeforeFullGC 默认开启 在FullGC发生之前触发一次MinorGC
UseGCOverHeadLimit 默认开启 禁止GC过程无限制的执行,如果过于频繁,就直接发生OutOfMemory异常
UseTLAB Sever模式默认开启 优先在本地缓存区分配对象,避免分配内存时的锁定过程
MaxHeapFreeRatio 默认值为70 当Xmx比Xms大时,空闲堆大于指定比率时,自动收缩堆空间
MinHeapFreeRatio 默认值为40 当Xmx比Xms大时,空闲堆小于指定比率时,自动扩展堆空间
MaxPermSize(jdk1.8后用MaxMetaspaceSize) 默认值64 永久代最大值

多线程相关参数

参数 默认值 使用介绍
PreBlockSpin 默认值10 使用自旋锁时默认的自旋次数
UseThreadPriorities 默认开启 使用本地线程优先级
UseBiasedLocking 默认开启 是否使用偏向锁

 

调试参数

参数 默认值 使用介绍
HeapDumpOnOutOfMemoryError 默认关闭 当发生内存溢出异常时是否生成堆转储快照
PrintConcurrentLocks 默认关闭 大于JUC中锁的状态
PrintGCDetails 默认关闭 打印GC详细信息
PrintGCTimeStamps 默认关闭 打印GC停顿耗时
PrintTenuringDistribution 默认关闭 打印GC后新生代各个年龄对象的大小
TraceClassLoading 默认关闭 答应类加载信息
TraceClassUnloading 默认关闭 打印类卸载信息

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章