简单说明
参数的使用方式
- -XX:+<option>开启option参数,如:-XX:+UseParNew
- -XX:-<option>关闭option参数,如:-XX:-UseParallelGC
- -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 | 默认关闭 | 打印类卸载信息 |