[转帖]常用JVM虚拟机参数说明

常用,jvm,虚拟机,参数,说明 · 浏览次数 : 0

小编点评

**XX:ParallelGCThreads** * 设置年轻代和老年代的parallel垃圾收集器线程数。 * 默认值为JVM可用的CPU核数。 * 使用该选项时,应注意设置其他参数,例如-XX:+PrintGCDetails。 **XX:SurvivorRatio** * 设置伊甸园和幸存者空间的比例。 * 默认值为8。 * 使用该选项时,应注意设置其他参数,例如-XX:UseAdaptiveSizePolicy。 **XX:TLABSize** * 设置线程分配(TLAB)的初始大小。 * 默认值为0,表示JVM自动选择初始大小。 * 使用该选项时,应注意设置其他参数,例如-XX:+UseAdaptiveSizePolicy。 **XX:UseAdaptiveSizePolicy** * 使用自适应分代大小。 * 默认启用。 * 使用该选项时,应注意设置其他参数,例如-XX:SurvivorRatio。 **XX:UseCMSInitiatingOccupancyOnly** * 当使用CMS垃圾回收器时,仅占用初始化时候的内存。 * 默认启用。 * 使用该选项时,应注意设置其他参数,例如-XX:SurvivorRatio。 **XX:UseConcMarkSweepGC** * 使用CMS垃圾回收器进行内存分配。 * 默认启用。 * 使用该选项时,应注意设置其他参数,例如-XX:SurvivorRatio。 **XX:UseG1GC** * 使用G1垃圾收集器进行内存分配。 * 默认启用。 * 使用该选项时,应注意设置其他参数,例如-XX:SurvivorRatio。 **XX:UseGCOverheadLimit** * 设置GC时间限制。 * 默认启用。 * 使用该选项时,应注意设置其他参数,例如-XX:SurvivorRatio。 **XX:UseNUMA** * 应用NUMA架构。 * 默认禁用。 * 使用该选项时,应注意设置其他参数,例如-XX:SurvivorRatio。 **XX:UseParallelGC** * 使用并行垃圾收集器。 * 默认启用。 * 使用该选项时,应注意设置其他参数,例如-XX:SurvivorRatio。 **XX:UseParallelOldGC** * 在老年代启用并行GC。 * 默认禁用。 * 使用该选项时,应注意设置其他参数,例如-XX:SurvivorRatio。

正文

常用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的工具,如jcmdjstackjmapjinfo等。
-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来禁用该选项。
文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览97984 人正在系统学习中

与[转帖]常用JVM虚拟机参数说明相似的内容:

[转帖]常用JVM虚拟机参数说明

常用JVM虚拟机参数说明 原文地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html 非标准选项 参数说明-Xcomp强制JVM虚拟机在方法第一次被调用的时候就进行本地编译。-Xint强制JVM运行在解释模式。在

[转帖]【JVM】常用虚拟机参数及实例

常用参数表 参数描述-XX:+PrintGC启动java虚拟机后,只要遇到gc,就打印日志-XX:+PrintGCDetailsgc发生时,打印更详细的日志-XX:+PrintHeapAtGC每一次GC后,都打印堆信息-XX:+PrintGCTimeStampsgc发生时,额外打印gc时间,该时间为

[转帖]【JVM】JDK命令行工具

在JDK/bin目录下我发现了许多命令行工具 这些命令有哪些作用呢,接下来我就来详细介绍一下 常用JDK命令行工具 命令名称全称用途jstatJVM Statistics Monitoring Tool用于收集Hotspot虚拟机各方面的运行数据jpsJVM Process Status Tool显

[转帖]下一代JVM:GraalVM的十大特性

https://it.deepinmind.com/jvm/2019/08/27/graalvm-ten-things.html GraalVM有许多不同的组件,如果你只是听说过它或有些简单的了解,肯定无法一窥全豹。本文将列举下GraalVM的几大常用功能,看看它们都能做些什么。 高性能的现代Jav

[转帖]jvm一般相关配置OutOfMemoryError关参数配置解释

一般运行java应用都会根据实际情况设置一些jvm相关运行参数 特别是有关内存和oom溢出等参数,方便后续问题定位和解决 如常用的以下配置 nohup java -Xms256m -Xmx24g -Xmn8g -verbose:gc -XX:+PrintGCDateStamps -XX:+Print

[转帖]JVM监控及诊断工具-命令行

https://www.cnblogs.com/xiaojiesir/p/15622372.html 性能指标 停顿时间(响应时间) 提交请求和返回响应之间使用的时间,一般比较关注平均响应时间 常用操作的响应时间列表: 操作 响应时间 打开一个站点 几秒 数据库查询一条记录(有索引) 十几毫秒 机械

[转帖]常用的 Stress / Performance 工具

https://benjr.tw/532 雖然自己是從事 QA(Quality Assurance) 相關測試工作,但對於這些工具的使用還是有很多問號,下面列出 Linux 下我常用的 壓力(Stress) 與 的效能 (Performance) 測試軟體. 壓力測試 (Stress) 要如何在 L

【转帖】71.常用的显示GC日志的参数、GC日志分析、日志分析工具的使用

目录 1.常用的显示GC日志的参数2.图解垃圾`GC`日志(重要)3.日志分析工具的使用 1.常用的显示GC日志的参数 解释: 日志中,GC和Full GC表示的是GC的类型。GC只在新生代进行,Full GC包括新生代和老年代、方法区。 Allocation Failure:GC发生的原因,一般新

[转帖]MYSQL常用的Show命令笔记

http://t.zoukankan.com/lovekingly-p-4387765.html 1、查询数据库 SHOW DATABASES; 2、查询数据库中表 SHOW TABLES; SHOW TABLES FROM db; 3、查询表索引 SHOW INDEX FROM table 4、查

[转帖]国内常用镜像加速源分享

国内常用镜像加速源分享 我们经常在下载一些 Python 或 Java等包的时候总是会访问国外的资源站,但是墙内访问国外的网络一般都比较卡。这里作者搜集了一些常用的国内镜像源,涵盖一些互联网大厂和知名高校的repo, 用得上的可以收藏备用哦~ Python相关镜像 (1) pip使用说明 对于Pyt