Endix-C-虚拟机参数

使用 -XX:+PrintFlagsFinal 可以输出所有参数的名称和默认值。应用参数的方式有以下 3 种:

  1. -XX:+<option>开启option参数
  2. -XX:-<option>关闭option参数
  3. -XX:<option>=<value>将option参数的值设置为value

以下是 JDK6 中常用的参数。

内存管理参数

参数默认值使用介绍
DisableExplicitGC默认关闭忽略来自 System.gc() 方法触发的垃圾回收
ExplicitGCInvokesConcurrent默认关闭当收到 System.gc() 方法提交的垃圾回收申请时,使用 CMS 收集器进行收集
UseSerialGCClient 模式 的虚拟机默认开启,其他模式默认关闭虚拟机运行在 Client 模式下的默认值,打开此开关后,使用 Serial+Serial Old 的收集器组合进行内存回收
UseParNewGC默认关闭打开此开关后,使用 ParNew+Serial Old 的收集器组合进行内存回收
UserConcMarkSweepGC默认关闭打开此开关后,使用 ParNew+CMS+Serial Old 的收集器组合进行内存回收。如果 CMS 收集器出现 Concurrent Mode Failure,则 Serial Old 收集器将作为后备收集器
UserParallelGCServer 模式的虚拟机默认开启,其他模式默认关闭虚拟机运行在 Server 模式下的默认值,打开此开关后,使用 Parallel Scavenge+Serial Old 的收集器组合进行内存回收
UseParallelOldGC默认关闭打开此开关后,使用 Parallel Scavenge+Parallel Old 的收集器组合进行内存回收
ServivorRatio默认为 8新生代中 Eden 区域与 Survivor 区域的容量比值
PretenureSizeThreshold无默认值直接晋升到老年代的对象大小,设置该参数后,大于这个参数的对象将直接在老年代分配
MaxTenuringThreshold默认为 15晋升到老年代的对象年龄。每个对象在坚持过一次 Mirror GC 之后,年龄就加 1,当超过该参数值时进入老年代
UseAdaptiveSizePolicy默认开启动态调整 Java 堆中各个区域的大小及进入老年代的年龄
HandlePromotionFailureJDK 1.5 及之前的版本默认关闭,JDK 1.6 之后默认开启是否允许分配担保失败,即老年代的剩余空间不足以应付新生代的整个 Eden 和 Survivor 区的所有对象都存活的极端情况
ParallelGCThreads少于或等于 8 个 CPU 时默认为 CPU 的数量值,多余 8 个 CPU 时比 CPU 的数量之小设置并行 GC 时进行内存回收的线程数
GCTimeRatio默认为 99GC 时间占总时间的比例,默认允许 1% 的 GC 时间。仅在使用 Parallel Scavenge 收集器时生效
MaxGCPauseMillis无默认值设置 GC 的最大停顿时间。仅在使用 Parallel Scavenge 收集器时生效
CMSInitiatingOccupancyFraction默认 68设置 CMS 收集器在老年代空间被使用多少后触发垃圾回收,仅在使用 CMS 收集器时生效
UseCMSCompactAtFullCollection默认开启设置 CMS 收集器在完成垃圾收集后是否需要进行一次内存碎片整理。仅在使用 CMS 收集器时生效
CMSFullGCsBeforeCompaction无默认值设置 CMS 收集器在进行若干次垃圾收集后在启动一次内存碎片整理。仅在使用 CMS 收集器时生效
ScavengeBeforeFullGC默认开启在 Full GC 发生之前触发一次 Mirror GC
UseGCOverheadLimit默认开启禁止 GC 过程无限制的执行,如果过于频繁,就直接发生 OutOfMemory 异常
UseTLABServer 模式默认开启优先在本地线程缓冲区中分配对象,避免分配内存时的锁定过程
MaxHeapFreeRatio默认为 70当 Xmx 比 Xms 值大时,堆可以动态收缩和扩展,该参数控制当堆空闲大于指定比例时自动收缩
MinHeapFreeRatio默认为 70当 Xmx 比 Xms 值小时,对可以动态收缩或扩展,该参数控制当对空闲小于指定比率时自动扩展
MaxPermSize大部分情况下默认为 64MB永久代的最大值

即时编译参数

参数默认值使用介绍
CompileThresholdClient 模式下默认为 1500,Server 模式下为 1000触发方法即时编译的阈值
OnStackReplaceRercentageClient 模式下为 933,Server 模式下为 140OSR 比率,它是 OSR 即时编译阈值计算公式的一个参数,用于代替 BckEdgeThreshold 参数控制回边计数器的实际溢出阈值
ReversedCodeCacheSize大部分情况下是 32MB即时编译器编译的代码缓存的最大值

类型加载参数

参数默认值使用介绍
UseSplitVerifer默认开启使用依赖 StackMapTable 信息的类型检查代替数据流分析,以加快字节码校验速度
FailOverToOldVerifier默认开启当类型校验失败时,是否允许回到老的类型推导校验方式重新校验,如果开启则允许
RelaxAccessControlCheck默认关闭在检验阶段放松对类型访问性的限制

多线程相关参数

参数默认值使用介绍
UseSpinningJDK 1.6 默认开启,JDK 1.5 默认关闭开启自旋锁以避免线程频繁挂起和唤醒
PreBlockSpin默认为 10使用自旋锁时默认的自旋次数
UseThreadPriorities默认开启使用本地线程优先级
UseBiasedLocking默认开启使用使用偏向锁
UseFastAccessorMethods默认开启当频繁反射执行某个方法时,生成字节码来加快反射的执行速度

性能参数

参数默认值使用介绍
AggressiveOptsJDK 1.6 默认开启,JDK 1.5 默认关闭使用激进的优化特性,这些特性一般是具备正面和负面双重影响的,需要根据具体应用特点来分析才能判定是否对性能有益
UseLargePages默认开启如果可能,使用大内存分页,该特性需要操作系统的支持
LargePageSizeInBytes默认为 4MB使用指定大小的内存分页,该特性需要操作系统的支持
StringCache默认开启使用使用字符串缓存

调试参数

参数默认值使用介绍
HeapDumpOnOutOfMemoryError默认关闭在发生内存溢出时是否生成堆转储快照
OnOutOfMemoryError无默认值当虚拟机抛出内存溢出异常时,执行指定的命令
OnError无默认值当虚拟机抛出 ERROR 异常时,执行指定的命令
PrintClassHistogram默认关闭使用 [ctrl]-[break] 快捷键输出类统计状态,相当于 jmap-histo 的功能
PrintConcurrentLocks默认关闭打印 JUC 中锁的状态
PrintCommandLineFlags默认关闭打印启动虚拟机时输入的非稳定参数
PrintCompilation默认关闭打印方法的即时编译信息
PrintGC默认关闭打印 GC 信息
PrintGCDetails默认关闭打印 GC 详细信息
PrintGCtimeStamps默认关闭打印 GC 停顿耗时
PrintTenuringDistribution默认关闭打印 GC 后新生代各个年龄对象的大小
TracClassLoading默认关闭打印类加载信息
TraceClassUnloading默认关闭打印类卸载信息
PringInlining默认关闭打印方法的内联信息
PrintCFGToFile默认关闭将 CFG 图信息输出到文件,只有 DEBUG 版虚拟机才支持该参数
PrintIdealGraphFile默认关闭将 Ideal 图信息输出到文件,只有 DEBUG 版虚拟机才支持该参数
UnlockDiagnosticVM Options默认关闭让虚拟机进入诊断模式,一些参数(如 PrintAssembly)需要在诊断模式下才能使用
PrintAssembly默认关闭打印即时编译后的二进制信息