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 |