标准参数(-)
所有的JVM实现都必须实现这些参数的功能,而且向后兼容;命令 java -help可以列出java 应用启动时标准选项(不同的JVM实现是不同的)。
标准参数比较常用的
配置参数 | 说明 |
-verbose:class | 输出jvm载入类的相关信息,当jvm报告说找不到类或者类冲突时可此进行诊断。 |
-verbose:gc | 输出每次GC的相关情况。 |
-verbose:jni | 输出native方法调用的相关情况,一般用于诊断jni调用错误信息。 |
非标准参数(-X)
默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;java -X可以列出不标准的参数(这是JVM的扩展特性)。-X相关的选项不是标准的,被改变也不会通知。
非标准参数比较常用的
配置参数 | 说明 | 示例 | 默认值 | 备注 |
-Xmx | 设置JVM最大可用内存 | -Xmx83886080 -Xmx81920k -Xmx80m | 物理内存的1/4 | 必须是1024的整数倍且大于等于2M,-Xms 和 -Xmx 通常设置为相同,-Xmx选项等同于-XX:MaxHeapSize。 |
-Xmn | 设置年轻代初始及最大大小。 | -Xmn256m -Xmn262144k -Xmn268435456 | Oracle官方推荐将年轻一代的大小保持在堆总大小的一半到四分之一之间。Sun官方推荐配置为整个堆的3/8。也可以使用-XX:NewSize来设置初始大小,使用-XX:MaxNewSize设置最大大小 | |
-Xms | 设置JVM初始内存及最小内存。 | -Xms6291456 -Xms6144k -Xms6m | 物理内存的1/64 | 如果不设置此选项,则初始大小将设置为为旧代和年轻代分配的大小之和。可以使用-Xmn选项或-XX:NewSize选项设置年轻代的堆的初始大小。 请注意,-XX:InitalHeapSize选项也可以用于设置初始堆大小。如果它出现在命令行上的-Xms之后,则初始堆大小将设置为-XX:InitalHeapSize指定的值。 |
-Xss | 设置线程的栈大小 | -Xss1m -Xss1024k -Xss1048576 | 默认值取决于平台 ● Linux/ARM (32-bit): 320 KB ● Linux/i386 (32-bit): 320 KB ● Linux/x64 (64-bit): 1024 KB ● OS X (64-bit): 1024 KB ● Oracle Solaris/i386 (32-bit): 320 KB ● Oracle Solaris/x64 (64-bit): 1024 KB | 等同于-XX:ThreadStackSize |
-Xloggc | 日志文件的输出路径。 | -Xloggc:garbage-collection.log | 用于记录详细的GC事件。写入此文件的信息类似于-verbose:gc的输出,其中包含自每个记录事件之前的第一个gc事件以来经过的时间。如果同时使用了-Xloggc选项,则会覆盖-verbose:gc。 |
非Stable参数(-XX)
此类参数各个jvm实现会有所不同,这些都是不稳定的并且不推荐在生产环境中使用。将来可能会随时取消,需要慎重使用;而且如果在新版本有什么改动也不会发布通知。
参数名称 | 说明 | 示例 | 默认值 | 备注 |
-XX:+HeapDumpOnOutOfMemoryError | 当首次遭遇OOM时导出此时堆中相关信息 | 禁用 | 抛出Java.lang.OutOfMemoryError异常时将Java堆转储到当前目录中的文件,可以使用-XX:HeapDumpPath选项显式设置堆转储文件路径和名称。 | |
-XX:HeapDumpPath | 指定导出堆信息时的路径或文件名 | -XX:HeapDumpPath=./java_pid%p.hprof -XX:HeapDumpPath=/var/log/java/java_heapdump.hprof | 当前 工作目录下,名为 java_pidpid.hprof | 当-XX:+HeapDumpOnOutOfMemoryError选项开启后,当抛出OutOfMemoryError时指定dump文件生成位置 |
-XX:LogFile | 设置写入日志数据的路径和文件名。 | -XX:LogFile=/var/log/java/hotspot.log | 当前工作目录中创建的,名为hotspot.log。 | |
-XX:OnError | 出现致命ERROR之后运行自定义命令 | -XX:OnError="gcore %p;dbx - %p" | 设置在发生不可恢复的错误时要运行的自定义命令或一系列分号分隔的命令。如果字符串包含空格,则必须用引号将其括起来。 | |
-XX:OnOutOfMemoryError | 当首次遭遇OOM时执行自定义命令 | 有关命令字符串的示例,请参见-XX:OnError选项的描述。 |
高级GC参数
参数名称 | 说明 | 示例 | 默认值 |
-XX:ActiveProcessorCount | 覆盖VM用于计算其用于各种操作(如垃圾收集和ForkJoinPool)的线程池大小的CPU数。 | -XX:ActiveProcessorCount=2 | |
-XX:+AggressiveHeap | 启用Java堆优化。 | 禁用状态,堆未优化 | |
-XX:+AlwaysPreTouch | 允许在JVM初始化期间触摸Java堆上的每个页面。即在服务启动的时候真实的分配物理内存给JVM,而不再是虚拟内存 | 禁用,所有页面都在JVM堆空间填充时提交 | |
-XX:+CMSClassUnloadingEnabled | 在使用CMS垃圾收集器时启用类卸载。默认情况下,此选项处于启用状态。 | 启用 | |
-XX:CMSExpAvgFactor | 设置在计算并发收集统计信息的指数平均值时用于加权当前样本的时间百分比(0到100)。 | -XX:CMSExpAvgFactor=15 | 25 |
-XX:CMSInitiatingOccupancyFraction | 设置老年代占用率的百分比(0到100),在该百分比下开始CMS收集周期。 | -XX:CMSInitiatingOccupancyFraction=20 | -1。 |
-XX:+CMSScavengeBeforeRemark | 在CMS重新标记步骤之前启用清除尝试。 | 禁用 | |
-XX:CMSTriggerRatio | 设置在CMS收集周期开始之前分配的由-XX:MinHeapFreeRatio指定的值的百分比(0到100)。 | -XX:CMSTriggerRatio=75 | 80 |
-XX:ConcGCThreads | 设置用于并发GC的线程数。 | -XX:ConcGCThreads=2 | 默认值取决于JVM可用的CPU数量。 |
-XX:+DisableExplicitGC | 禁用使用System.gc()调用的选项。 | 禁用 | |
-XX:+ExplicitGCInvokesConcurrent | 允许使用 System.gc()调用 并发GC。 | 禁用 | |
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses | 允许使用 System.gc()调用 并发GC 且在并发GC循环期间卸载类。 | 禁用 | |
-XX:G1HeapRegionSize | 设置的 G1 Region区域的大小 | -XX:G1HeapRegionSize=16m | 默认区域大小是根据堆大小确定的。 |
-XX:+G1PrintHeapRegions | 允许打印有关G1采集器分配和回收的区域信息 | 禁用 | |
-XX:G1ReservePercent | 预留内存占堆内存比值(0到50),以减少G1收集器升级失败的可能性。 | -XX:G1ReservePercent=20 | 10 |
-XX:InitialHeapSize | 设置内存分配池的初始大小。此值必须为0或1024的倍数且大于等于1M,如果将此选项设置为0,则初始大小将设置为为老一代和年轻一代分配的大小之和。年轻一代的堆大小可以使用-XX:NewSize选项设置。 | -XX:InitialHeapSize=6291456 -XX:InitialHeapSize=6144k -XX:InitialHeapSize=6m | 默认值是在运行时根据系统配置选择的 |
-XX:InitialRAMPercentage | 设置JVM在容器中堆的初始内存量,作为-XX:MaxRAM选项中所述确定的最大内存量的百分比。 | -XX:InitialRAMPercentage=5 | 1.5625 |
-XX:InitialSurvivorRatio | 设置吞吐量垃圾收集器使用的初始生存空间比率(由-XX:+UseParallelGC和/或-XX:+UseParellelOldGC选项启用)。默认情况下,吞吐量垃圾收集器通过使用-XX:+UseParallelGC和-XX:+UseParellelOldGC选项启用自适应大小调整,并且从初始值开始,根据应用程序行为调整幸存者空间的大小。如果禁用了自适应大小调整(使用-XX:-UseAdaptiveSizePolicy选项),则应使用-XX:SurvivorRatio选项为应用程序的整个执行设置幸存者空间的大小。 | -XX:InitialSurvivorRatio=4 | 8 |
-XX:InitiatingHeapOccupancyPercent | 启动并发GC周期时的堆内存占用百分比 | -XX:InitiatingHeapOccupancyPercent=75 | 45 |
-XX:MaxGCPauseMillis | 最大GC暂停时间(毫秒)。 | -XX:MaxGCPauseMillis=500 | |
-XX:MaxHeapSize | -XX:MaxHeapSize选项等效于-Xmx。 | -XX:MaxHeapSize=83886080 -XX:MaxHeapSize=81920k -XX:MaxHeapSize=80m | |
-XX:MaxHeapFreeRatio | GC事件后允许的最大可用堆空间百分比(0到100)。如果可用堆空间超出此值,则堆将缩小。 | -XX:MaxHeapFreeRatio=75 | 70 |
-XX:MaxMetaspaceSize | 元空间最大内存。 | -XX:MaxMetaspaceSize=256m | 无限制 |
-XX:MaxNewSize | 年轻代最大内存 | ||
-XX:MaxRAMPercentage | 设置JVM使用容器内存的最大百分比,以-XX:MaxRAM选项中所述的最大内存的百分比表示。 | -XX:MaxRAMPercentage=75 | 25 |
-XX:MaxTenuringThreshold | 年轻代晋升老年代的最大年龄阈值。 | -XX:MaxTenuringThreshold=10 | 最大值为15。parallel 收集器的默认值为15,CMS收集器为6。 |
-XX:MetaspaceSize | 设置MetaSpace大小,该空间将在首次超过时触发垃圾收集。垃圾收集的此阈值根据使用的元数据量而增加或减少。 | -XX:MetaspaceSize=20 | 默认大小取决于平台。 |
-XX:MinHeapFreeRatio | 设置GC事件后允许的最小可用堆空间百分比(0到100)。 | -XX:MinHeapFreeRatio=25 | 40 |
-XX:MinRAMPercentage | 设置JVM在应用人体工程学启发式之前可用于Java堆的最大内存量,以小堆的-XX:MaxRAM选项中所述确定的最大内存的百分比表示。小堆是大约125 MB的堆。默认值为50%。 | -XX:MinRAMPercentage=75 | 50 |
-XX:NewRatio | 设置年轻代和年老代的比值。 | -XX:NewRatio=1 | 2 |
-XX:NewSize | 等效于-Xmn | -XX:NewSize=256m -XX:NewSize=262144k -XX:NewSize=268435456 | |
-XX:ParallelGCThreads | 设置年轻代和老年代中用于并行GC的线程数。 | -XX:ParallelGCThreads=2 | 取决于JVM可用的CPU数量。 |
-XX:+ParallelRefProcEnabled | 启用并行处理Reference对象 | 禁用 | |
-XX:+PrintAdaptiveSizePolicy | 允许打印有关堆自适应大小调整的信息。 | 禁用 | |
-XX:+PrintGC | 打印每次GC信息。 | 禁用 | |
-XX:+PrintGCApplicationConcurrentTime | 启用打印自上次暂停(例如,GC暂停)以来经过的时间。 | 禁用 | |
-XX:+PrintGCApplicationStoppedTime | 允许打印暂停(例如GC暂停)持续的时间。 | 禁用 | |
-XX:+PrintGCDateStamps | 允许在每次GC打印时间戳。 | 禁用 | |
-XX:+PrintGCDetails | 允许在每次GC时打印详细消息。。 | 禁用 | |
-XX:+PrintGCTaskTimeStamps | 允许打印每个GC工作线程的时间戳。 | 禁用 | |
-XX:+PrintGCTimeStamps | 允许在每次GC打印时间戳。 | 禁用 | |
-XX:+PrintStringDeduplicationStatistics | 打印重复字符串清除的详细信息。 | 禁用 | |
-XX:+PrintTenuringDistribution | 允许打印对象年龄信息。 | 禁用 | |
-XX:+ScavengeBeforeFullGC | 在每次FULL GC之前启用YOUNG GC。 | 启用 | |
-XX:SoftRefLRUPolicyMSPerMB | 设置软引用在上次引用后在堆上保持活动状态的时间(毫秒)。默认值是堆中每空闲兆字节一秒的生存期。 | -XX:SoftRefLRUPolicyMSPerMB=2500 | 1000 |
-XX:StringDeduplicationAgeThreshold | 达到指定年龄的字符串对象被视为重复数据消除的候选对象。 | -XX:StringDeduplicationAgeThreshold=3 | 3 |
-XX:SurvivorRatio | 设置eden和survivor大小比例。 | -XX:SurvivorRatio=4 | 8 |
-XX:TargetSurvivorRatio | 设置Young GC后survivor区所需空间百分比(0到100)。 | -XX:TargetSurvivorRatio=30 | 50 |
-XX:TLABSize | 设置本地线程分配缓冲区(TLAB)的初始大小(以字节为单位)。 | -XX:TLABSize=512k | |
-XX:+UseAdaptiveSizePolicy | 启用自适应生成大小调整。 | 启用 | |
-XX:+UseCMSInitiatingOccupancyOnly | 启用设定的回收阈值(–XX:CMSInitiatingOccupancyFraction )作为启动CMS收集器的唯一标准。 | 禁用 | |
-XX:+UseConcMarkSweepGC | 为老年代启用CMS垃圾收集器。当Parallel收集器(-XX:+UseParallelGC)垃圾收集器无法满足应用程序延迟要求时,Oracle建议您使用CMS垃圾收集器。G1垃圾收集器(-XX:+UseG1GC)是另一种选择。 | 禁用 | |
-XX:+UseG1GC | 启用G1垃圾收集器。 | 默认情况下,此选项处于禁用状态,并根据机器的配置和JVM的类型自动选择收集器。 | |
-XX:+UseGCOverheadLimit | 在抛出OutOfMemoryError异常之前,使用一种策略,以限制JVM在GC上花费的时间比例。 | 启用 | |
-XX:+UseNUMA | 通过增加应用程序对低延迟内存的使用,在具有非均匀内存体系结构(NUMA)的计算机上实现应用程序的性能优化。默认情况下, | 禁用 | |
-XX:+UseParallelGC | 使用Parallel垃圾收集器(也称为吞吐量收集器),通过利用多个处理器提高应用程序的性能。 | 禁用 | |
-XX:+UseParallelOldGC | 对Full GC使用Parallel垃圾收集器。 | 禁用 | |
-XX:+UseParNewGC | 在年轻代中使用 ParNew收集器 进行收集。 | 禁用 | |
-XX:+UseSerialGC | 启用串行垃圾回收器(Serial)的使用。 | 默认情况下,此选项处于禁用状态,并根据机器的配置和JVM的类型自动选择收集器。 | |
-XX:+UseSHM | 在Linux上,允许JVM使用共享内存来设置大型页面。 | ||
-XX:+UseStringDeduplication | 启用字符串重复数据清除。 | 禁用 | |
-XX:+UseTLAB | 允许在年轻代中使用本地线程分配缓冲区(TLAB)。 | 启用 |
JDK8中不推荐和删除的配置
参数名称 | 说明 | 备注 |
-Xincgc | 启用增量垃圾收集。JDK 8中不推荐使用此选项,没有替换项。 | |
-Xrunlibname | 加载指定的调试/分析库。此选项被-agentlib选项取代。 | |
-XX:CMSIncrementalDutyCycle | 每次增量回收垃圾的占总垃圾回收任务的比例(0到100)。 | 继-XX:+CMSIncrementalMode选项被弃用之后,JDK 8中不推荐使用此选项,没有替换项。 |
-XX:CMSIncrementalDutyCycleMin | 启用-XX:+CMSIncrementalPacing时,每次增量回收垃圾的占总垃圾回收任务的最小比例 | 继-XX:+CMSIncrementalMode选项被弃用之后,JDK 8中不推荐使用此选项,没有替换项。 |
-XX:+CMSIncrementalMode | 启用CMS采集器的增量模式。 | JDK 8中不推荐使用此选项,没有替换项,以及以CMSIncremental开头的其他选项。 |
-XX:CMSIncrementalOffset | 两次小回收之间的允许并发收集器运行的时间的百分比 | 继-XX:+CMSIncrementalMode选项被弃用之后,JDK 8中不推荐使用此选项,没有替换项。 |
-XX:+CMSIncrementalPacing | 根据JVM运行时收集的统计信息自动调整增量模式占空比。 | 继-XX:+CMSIncrementalMode选项被弃用之后,JDK 8中不推荐使用此选项,没有替换项。 |
-XX:CMSIncrementalSafetyFactor | 设置计算占空比时用于增加保守性的时间百分比(0到100) | 继-XX:+CMSIncrementalMode选项被弃用之后,JDK 8中不推荐使用此选项,没有替换项。 |
-XX:CMSInitiatingPermOccupancyFraction | 设置启动GC的永久代占用率百分比(0到100)。 | JDK 8中不推荐使用此选项,没有替换项。 |
-XX:MaxPermSiz | 设置最大永久生成空间大小(字节)。 | 此选项在JDK 8中已弃用,并被-XX:MaxMetaspaceSize选项取代。 |
-XX:PermSize | 设置分配给永久生成的空间(以字节为单位),如果超过该空间,将触发垃圾收集。 | 此选项已在JDK 8中弃用,并被-XX:MetaspaceSize选项取代。 |
-XX:+UseSplitVerifier | 启用验证过程的拆分。默认情况下,此选项在以前的版本中已启用,验证分为两个阶段:类型引用(由编译器执行)和类型检查(由JVM运行时执行)。 | JDK 8中不推荐使用此选项,现在默认情况下,验证被分割,无法禁用它。 |
-XX:+UseStringCache | 缓存常用字符串 | 此选项已从JDK 8中删除,无需更换。 |