常用JVM虚拟机参数说明
原文地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
非标准选项
参数 | 说明 |
---|---|
-Xcomp | 强制JVM虚拟机在方法第一次被调用的时候就进行本地编译。 |
-Xint | 强制JVM运行在解释模式。在该模式下,方法不会被编译为本地代码,所有的字节码都会被解释执行。 |
-Xloggc:filename | 设置GC日志信息的保存路径。如果同时传递-verbose:gc的话,该参数会覆盖-verbose:gc的设置。 |
-Xmnsize | 同时设置初始化和最大的年轻代大小,若不指定单位,则默认为字节,在数字后边可以跟单位,如k或K,m或M,g或G。Oracle建议年轻代的大小是整个堆大小的四分之一到一半之间。还可以使用-XX:NewSize设置年轻代的初始大小,-XX:MaxNewSize指定最大大小。 |
-Xmssize | 设置堆的初始大小,必须要大于1M,可以通过在大小后追加单位,如k或K,m或M,g或G。若不设置该值,则当前值为年轻代和老年代的初始大小总和。 |
-Xmxsize | 设置堆的最大值,必须要大于2M。 |
-Xsssize | 设置线程栈的大小。每个平台的默认值不同 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:+DisableAttachMechanism | 禁止工具连接到当前JVM,当前选项默认关闭,所以可以使用JVM的工具,如jcmd ,jstack ,jmap 和jinfo 等。 |
-XX:MaxDirectMemorySize=size | 设置New I/O(java.nio包)中direct-buffer最大允许分配的空间,默认为字节。可以追加单位,k或K,m或M,g或G。默认值是0,JVM自动分配direct-buffer的大小。 |
-XX:-UseBiasedLocking | 禁用偏向锁。默认使用偏向锁。 |
-XX:-UseCompressedOops | 禁用指针压缩。默认打开指针压缩。压缩指针通常用在当堆空间小于32GB的时候。当压缩指针打开的时候,对象引用使用32位偏移量代替64位指针,这样会提高应用在堆小于32GB时候的性能。这个选项只能用在64位的JVM上。 |
高级JIT编译器选项
参数 | 说明 |
---|---|
-XX:+AggressiveOpts | 启动强制性能优化,该选项有望在以后的发行版中作为默认启动的选项。默认禁用。 |
-XX:+BackgroundCompilation | 使用后台编译。该选项默认激活。使用 -XX:-BackgroundCompilation 禁用该功能。 |
-XX:CICompilerCount=threads | 设置编译线程的数量。JVM在server模式下默认是2,在client模式下默认是1。如果使用分层编译的话,这个值会扩展到与CPU核数一样的值。 |
-XX:CompileThreshold=invocations | 设置方法在被编译前的调用次数。在server模式的JVM中,JIT编译器为了可以更有效的编译,会从10000次的方法调用中获取信息。在client模式的JVM中,默认值是1500次。当分层编译启用的时候,该选项会被忽略。 |
-XX:+DoEscapeAnalysis | 启用逃逸分析。该选项默认启用。使用-XX:-DoEscapeAnalysis 来禁用。只有Java HotSpot Server VM支持该选项。 |
-XX:+Inline | 启用方法内联。该选项默认启用以提高性能。可以使用-XX:-Inline 关闭方法内联。 |
-XX:InlineSmallCode=size | 设置会被内联优化方法的最大大小,默认单位是字节,可以追加单位,如k\K\m\M\g\G,只有小于该值的方法才会被内联优化。默认值是1000字节。 |
-XX:+PrintAssembly | 启用该选项后,会使用外部库disassembler.so 打印字节码和本地代码的集合。你可以通过这个选项看到生成的代码,从而找到性能问题。该选项默认关闭,通常与-XX:UnlockDiagnosticVMOptions 选项一起使用。 |
高级可靠性选项
参数 | 说明 |
---|---|
-XX:+HeapDumpOnOutOfMemory | 启动该选项后,当java.lang.OutOfMemoryError 错误发生后,会在当前文件夹产生一个HPROF类型的Java堆转储文件。可以使用-XX:HeapDumpPath 选项显式的指定堆转储文件的路径。该选项默认关闭。 |
高级垃圾回收选项
参数 | 说明 |
---|---|
-XX:+AggressiveHeap | 启动Java堆优化。根据计算机的配置(RAM和CPU),这个选项会设置各种参数,使其适用于长时间运行且对内存分配比较频繁的应用。该选项默认关闭。 |
-XX:CMSInitiatingOccupancyFraction=percent | 设置启动当老年代占用多少百分比的时候,CMS垃圾回收会启动。默认值设置为-1。任何负值(包括默认值)都意味着会使用-XX:CMSTriggerRatio 用于定义初始百分比的值。 |
-XX:CMSTriggerRatio=percent | 设置由-XX:MinHeapFreeRatio 选项指定的在CMS垃圾回收之前百分比的值(0-100),默认是80%。 |
-XX:ConcGCThreads=threads | 设置用于并行GC的线程数。默认值是JVM可用的CPU核数。 |
-XX:+DisableExplicitGC | 启动该选项会禁止应用中调用System.gc() 方法。默认禁用,意味着应用中可以显式的调用System.gc() 。 |
-XX:G1HeapRegionSize=size | 设置当使用G1垃圾收集器的时候,每个区域的值。这个值的取值范围是1M到32M之间。默认的区域大小由堆的大小自动决定。 |
-XX:+G1PrintHeapRegions | 启用打印G1垃圾收集器区域分配和回收的信息。该选项默认禁用。 |
-XX:InitialHeapSize=size | 设置堆的初始值。默认值在运行时根据系统配置生成。具体可以参考Java虚拟机GC优化指南 |
XX:InitialSurvivorRatio=ratio | 设置幸存区的初始比例,如果使用追求吞吐量的垃圾收集器,比如使用-XX:+UseParallelGC 或-XX:+UseParallelOldGC 指令,那么应用会使用当前初始比例启动,并且在运行期间,根据应用的使用情况,自动调整幸存区的比例。如果自适应功能通过-XX:-UseAdaptiveSizePolicy 关闭,那么应该使用-XX:SurvivorRatio 选项指定整个应用运行期间的幸存区大小。下面的公式可以根据年轻代的大小(Y)计算幸存区的初始大小(S),初始幸存区的比例(R)。 S=Y/(R+2) 公式中的2代表两个幸存区域。幸存区初始化比例的值越大,幸存区的空间大小越小。 幸存区比例的初始化默认值是8。如果年轻代的大小是2M,则初始化的幸存区大小是0.2M。 |
-XX:InitiatingHeapOccupancyPercent=percent | 设置堆占用多少百分比的时候,会启动并行GC循环。这个值用来设置当占用整个堆多少百分比的时候,垃圾收集器会触发一次并行GC循环。默认值是45%。0意味着一个不停歇的GC循环。 |
XX:MaxGCPauseMillis=time | 设置一个最大GC停顿的期望时间,单位毫秒。这是一个软目标,JVM会尽力实现这个目标。默认没有最大期望停顿时间。 |
-XX:MaxHeapSize=size | 设置堆分配的最大值,单位字节。这个值必须要大于2M。默认值是在运行时根据系统配置来定。作为生产服务的部署,通常-XX:InitialHeapSize 和-XX:MaxHeapSize 选项指定为相同的值。具体可以参考Java虚拟机垃圾回收优化指南。 |
-XX:MaxHeapFreeRatio=percent | 设置一次GC之后允许堆的最大空闲百分比(0 到 100)。如果空闲的堆空间大于这个值,那么堆的空间会被缩小。默认值是70%。 |
-XX:MaxMetaspaceSize=size | 设置元空间的最大内存值。默认该值不做限制,仅仅受限于系统分配给应用的可用物理内存。 |
-XX:MaxNewSize=size | 设置年轻代的最大值,单位字节。默认会自动根据最优性能来选择。 |
-XX:MaxTenuringThreshold=threshold | 设置自适应GC大小的最大占用阀值。最大值是15。吞吐量优先(并行)的垃圾收集器默认值是15,CMS垃圾收集器默认是6。 |
-XX:MetaspaceSize=size | 设置第一次触发GC的元空间大小。这个触发GC的阀值会根据元空间的使用量进行增加或减少。默认值由平台决定。 |
-XX:MinHeapFreeRatio=percent | 设置GC之后的最小允许的堆空闲百分比(0 到 100)。如果堆空闲空间低于该值,则堆空间会自动扩展。默认值是40%。 |
-XX:NewRatio=ratio | 设置年轻代和老年代的比例。默认值是2。 |
-XX:NewSize=size | 设置初始年轻代的大小,单位字节。年轻代区域用来保存新对象。这个区域的GC会比其它区域要频繁。如果年轻代设置的太小,那么会有大量的minor gc发生。如果这个值设置的太大,那么只会有full gc发生,这会消耗很长的时间。Oracle建议年轻代设置为整个堆的四分之一到一半之间。 |
-XX:ParallelGCThreads=threads | 设置年轻代和老年代的parallel垃圾收集器可用线程数。默认值是JVM可用的CPU核数。 |
-XX:+PrintGC | 启用在每次GC的时候输出信息,默认关闭。 |
-XX:+PrintGCDetails | 启动在每次GC的时候输出详细日志。默认关闭。 |
-XX:+ScavengeBeforeFullGC | 启用每次full GC前执行一次年轻代GC。该选项默认启用。Oracle建议不要关闭该选项,因为在FULL GC之前清理年轻代可以减少从老年代到年轻代的可达对象数量。如果想禁用该选项,可以指定-XX:-ScavengeBeforeFullGC 。 |
-XX:SurvivorRatio=ratio | 设置伊甸园和幸存者空间的比例。默认值是8。 |
-XX:TargetSurvivorRatio=percent | 设置年轻代GC之后的幸存者空间的期望使用百分比(0 到100)。默认值是50%。 |
-XX:TLABSize=size | 设置线程分配(TLAB)的初始大小,单位字节。如果该选项设置为0,那么JVM会自动选择初始大小。 |
-XX:+UseAdaptiveSizePolicy | 启用自适应分代大小。该选项默认启用。若要关闭该功能,指定-XX:-UseAdaptiveSizePolicy 并且明确设置可用的内存大小(参考-XX:SurvivorRatio 选项)。 |
-XX:+UseCMSInitiatingOccupancyOnly | 启用该选项后,占用空间的大小是CMS垃圾收集器初始化时候的唯一判定标准,该选项默认禁用。 |
-XX:+UseConcMarkSweepGC | 使老年代使用CMS垃圾回收器。Oracle建议当吞吐量优先的垃圾收集器(-XX:+UseParallelGC)无法满足应用延迟需求的时候,使用CMS垃圾收集器。G1垃圾收集器是另外一种选择。 这个选项默认禁用,垃圾收集器会根据机器的配置和JVM的类型来自动选择。当这个选项启用的时候, -XX:+UseParNewGC 选项会自动启用,并且不应该去禁用它,因为下列的组合选项在JDK8里面被废弃了:-XX:+UseConcMarkSweepGC -XX:-UseParNewGC 。 |
-XX:+UseG1GC | 启用G1垃圾收集器。这是一个服务器类型的垃圾收集器,是为了具有多核处理器和大内存的服务器。G1垃圾收集器很大概率满足GC的停顿时间要求,同时保持一个很好的吞吐量。G1垃圾收集器适合那些具有超大堆空间(6GB左右或更多)且对GC延迟需求很高(低于0.5秒的稳定且可预测的暂停时间)的应用。 该选项默认禁用,垃圾收集器会根据机器配置和JVM类型来自动选择。 |
-XX:+UseGCOverheadLimit | 启用该选项后,会限制GC的时间,如果GC时间超过限制,则会抛出OutOfMemoryError异常。这个选项默认启用,如果大于98%的本地时间都用来进行垃圾收集,且只有小于2%的堆被释放,parallel垃圾收集器会抛出OutOfMemoryError异常。可以通过-XX:-UseGCOverheadLimit 选项关闭该功能。 |
-XX:+UseNUMA | 启用该选项后,应用可以在具有NUMA架构的主机上使用低延迟的内存,从而优化应用性能。该选项默认禁用,无任何NUMA优化。只有当指定-XX:+UseParallelGC 的时候,该选项才有效。 |
-XX:+UseParallelGC | 启用并行垃圾收集器,该收集器也常被称为吞吐量优先的垃圾收集器,该收集器会使用多个处理器来提升性能。 默认该选项禁用,垃圾收集器会根据机器配置和JVM类型来自动选择。如果选项启用,那么 -XX:+UseParallelOldGC 选项也会自动启用,除非你显式的禁用掉它。 |
-XX:+UseParallelOldGC | 在老年代启用并行GC。默认禁用。 |
-XX:+UseParNewGC | 为年轻代启用并行GC。该选项默认禁用。当设置-XX:+UseConcMarkSweepGC 选项的时候,该选项会自动启用。使用该选项的同时不指定-XX:+UseConcMarkSweepGC 选项在JDK8中被废弃掉了。 |
-XX:+UseSerialGC | 启用串行GC。串行GC最适合小而简单的应用,不需要垃圾回收的特定功能。该选项默认禁用,垃圾回收器会根据机器配置和JVM类型自动选择。 |
-XX:+UseSHM | 在Linux系统中,启用该选项JVM会使用共享内存来设置巨页。 |
-XX:+UseTLAB | 在年轻代启用线程本地分配(TLABs)。这个选项默认启用。指定-XX:-UseTLAB 来禁用该选项。 |