JDK的虚拟机参数可以通过-XX:+PrintFlagsFinal参数,这样可以输出所有的参数名称和默认值。
JDK的参数格式如下:
-XX:+<option> // 开启option参数;
-XX:-<option> // 关闭option参数;
-XX:<option>=<value> // 将option参数的值设置为value。
-Xms 指定启动时内存大小(此值可以设置成与-Xmx相同,以避免每次GC完成后 JVM 内存重新分配)。
-Xmx 指程序运行时最大可用内存大小,程序运行中内存大于这个值会 OutOfMemory。
-Xmn 年轻代大小(整个JVM内存大小 = 年轻代 + 年老代 + 永久代)。
-Xss 设置每个线程的堆栈大小
1. JVM内存管理参数
序号 |
参数 |
默认值 |
说明 |
1 |
DisableExplicitGC |
关闭 |
忽略来自System.gc()方法触发的垃圾收集 |
2 |
ExplicitGCInvokesConcurrent |
关闭 |
收到System.gc()申请时,使用CMS进行垃圾收集 |
3 |
UseSerialGC |
Client模式默认开启,其他模式关闭 |
使用Serial + Serial Old进行内存回收 |
4 |
UseParNewGC |
关闭 |
使用ParNew + Serial Old进行内存回收 |
5 |
UseConcMarkSweepGC |
关闭 |
使用ParNew +CMS+ Serial Old进行内存回收 |
6 |
UseParallelGC |
Server模式默认开启,其他模式关闭 |
使用Parallel Scavenge+ Serial Old进行内存回收 |
7 |
UseParallelOldGC |
Server模式默认开启,其他模式关闭 |
使用Parallel Scavenge+ Parallel Old进行内存回收 |
8 |
SurvivorRatio |
默认为8 |
新生代Eden区域和Survivor区域的容量比 |
9 |
PretenureSizeThreshold |
无默认值 |
直接晋级到老年代的对象大小 |
10 |
MaxTenuringThreshold |
默认15 |
晋升到老年代的对象年龄,一个对象在经过一次Minor GC后,没有被回收则年龄+1。 |
11 |
UseAdapterSizePolicy |
默认开启 |
动态调整jvm堆中各个区域的大小以及进入老年代的年龄 |
12 |
HandlePromotionFailure |
默认开启 |
是否允许担保失败,即老年代的剩余空间不足以应付新生代的整个Eden和Survivor区的所有对象都存活的极端情况 |
13 |
ParallelGCThread |
当CPU <= 8是默认为CPU数量;当CPU>8时小于CPU数量 |
并行GC时内存回收的线程数 |
14 |
GCTimeRatio |
默认99,即1%的GC时间 |
GC时间占总时间的比率,仅在Parallel Scavenge时有效 |
15 |
MaxGCPauseMillis |
无默认值 |
GC最大停顿时间,仅在Parallel Scavenge时有效 |
16 |
CMSInitiatingOccupancyFraction |
默认68 |
CMS的老年代空间被使用多少后触发垃圾收集,仅在CMS时有效 |
17 |
UseCMSCompactAtFull Collection |
默认开启 |
CMS垃圾回收后是否进行内存碎片整理 |
18 |
CMSFullGCsBefore Compaction |
无默认值 |
CMS垃圾回收后N次进行内存碎片整理 |
19 |
ScavengeBeforeFullGC |
默认开启 |
在Full GC发生之前触发一次Minor GC |
20 |
UseGCOverHeadLimit |
默认开启 |
禁止GC无限制的执行,否则直接发生OutOfMemory异常 |
21 |
UseTLAB |
Server模式开启 |
优先在本地线程缓存中分配对象,避免分配内存时锁定过程 |
22 |
MaxHeapFreeRatio |
默认70 |
当Xmx比Xms大时,堆可以动态收缩和扩展,这个参数控制当堆空闲大于指定比率是自动收缩 |
23 |
MinHeapFreeRatio |
默认为40 |
当Xmx比Xms大时,堆可以动态收缩和扩展,这个参数控制当堆空闲小于指定比率是自动收缩 |
24 |
MaxPermSize |
大部分情况为64MB |
永久代最大值 |
2.即时编译参数
序号 |
参数 |
默认值 |
说明 |
1 |
CompileThreshold |
Client模式下1500,Server模式下10000 |
触发方法即时编译的阀值 |
2 |
OnStackReplacePercentage |
Client模式下933,Server模式下140 |
OSR比率,CompileThreshold阀值的计算公式的参数 |
3 |
ReservedCodeCacheSize |
大部分情况是32MB |
即时编译器编译代码缓存的最大值 |
3.类型加载参数
序号 |
参数 |
默认值 |
说明 |
1 |
UseSplitVerifier |
默认开启 |
使用依赖StackMapTasks信息的类型检查代替数据流分析,以加快字节码校验速度 |
2 |
FailOverToOldVerifier |
默认开启 |
当类型校验失败时,是否允许回到老的类型推到校验方式进行校验 |
3 |
RelaxAccessControlCheck |
默认关闭 |
在校验阶段放松对类型访问性的限制 |
4.多线程相关参数
序号 |
参数 |
默认值 |
说明 |
1 |
UseSpinning |
默认开启 |
开启自旋锁,避免线程频繁的挂起和唤醒 |
2 |
PreBlockSpin |
默认值10 |
使用自旋锁时默认的自旋次数 |
3 |
UseThreadPriorities |
默认开启 |
使用本地线程优先级 |
4 |
UseBiasedLocking |
默认开启 |
是否开启偏向锁 |
5 |
UseFastAccessMethods |
默认开启 |
当频繁反射执行某个方法时,生成字节码来加快反射的执行速度 |
5.性能参数
序号 |
参数 |
默认值 |
说明 |
1 |
AggressiveOpts |
默认开启 |
使用激进的优化特性 |
2 |
UseLargePages |
默认开启 |
使用大内存分页,需要操作系统支持 |
3 |
LargePageSizeInBytes |
默认4MB |
指定大小的内存分页,需要操作系统支持 |
4 |
StringCache |
默认开启 |
是否使用字符串缓存 |
6.调试参数
序号 |
参数 |
默认值 |
说明 |
1 |
HeapDumpOnOutOfMemoryError |
默认关闭 |
发生内存溢出异常时是否生成堆转存快照 |
2 |
OnOutOfMemoryError |
无默认值 |
当虚拟机抛出内存溢出时执行的指令 |
3 |
OnError |
无默认值 |
当虚拟机抛出ERROR时执行的指令 |
4 |
PrintClassHistogram |
默认关闭 |
使用Ctrl + Break快捷键输出类统计状态,相当于jmap -histo 的功能 |
5 |
PrintConcurrentLocks |
默认关闭 |
打印J.U.C中锁的状态 |
6 |
PrintCommandLineFlag |
默认关闭 |
打印启动虚拟机时输入的非稳定参数 |
7 |
PrintCompilation |
默认关闭 |
打印方法即时编译信息 |
8 |
PrintGC |
默认关闭 |
打印GC信息 |
9 |
PrintGCDetail |
默认关闭 |
打印GC的详细信息 |
10 |
PrintGCTimesStamps |
默认关闭 |
打印GC停顿耗时 |
11 |
PrintTenuringDistribution |
默认关闭 |
打印GC后新生代各个年龄对象的大小 |
12 |
TraceClassLoading |
默认关闭 |
打印类加载信息 |
13 |
TraceClassUnLoading |
默认关闭 |
打印类卸载信息 |
14 |
PrintInlining |
默认关闭 |
打印方法的内联信息 |
15 |
PrintCFGToFile |
默认关闭 |
将CFG图信息输出到文件,只有debug版本JVM才支持 |
16 |
PrintIdealGraphFile |
默认关闭 |
将Ideal图信息输出到文件,只有debug版本JVM才支持 |
17 |
UnlockDIagnosticVMOptions |
默认关闭 |
让虚拟机进入诊断模式 |
18 |
PrintAssembly |
默认关闭 |
打印即时编译后的二进制信息,需要开启UnlockDIagnosticVMOptions |
网友评论