最常用的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
UseParallelGCServer模式的虚拟机默认开启,其他模式关闭使用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)等细节参数了
HandlePromotionFailureJDK1.6默认开启是否允许空间分配担保失败
ParallelGCThreads无准确的默认值设置并行GC时进行内存回收的线程数,cpu个数小于等于8个时,默认值为cpu个数,当CPU个数大于8个时,默认值比CPU个数小
GCTimeRatio默认值99GC时间占总时间的比率,默认值为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异常
UseTLABSever模式默认开启优先在本地缓存区分配对象,避免分配内存时的锁定过程
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默认关闭打印类卸载信息

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值