这些选项是特定于Java HotSpot虚拟机的通用选项
-X
显示所有可用的-X选项的帮助
-Xbatch
禁用后台编译。
默认情况下,JVM将方法编译为后台任务,以解释器模式运行该方法,直到后台编译完成。
-Xbatch标志禁用后台编译,以便所有方法的编译都作为前台任务进行,直到完成。
该选项等效于:
-XX:-BackgroundCompilation
-Xbootclasspath:path
指定目录,JAR文件和ZIP归档文件的列表,用分号(;)分隔以搜索引导类文件
这些文件代替了JDK中包含的引导类文件
不要部署使用此选项覆盖rt.jar中的类的应用程序,因为这违反了JRE二进制代码许可证
-Xbootclasspath/a:path
指定目录,JAR文件和ZIP归档文件的列表,以分号(;)分隔,以附加到默认引导程序类路径的末尾
不要部署使用此选项覆盖rt.jar中的类的应用程序,因为这违反了JRE二进制代码许可证
-Xbootclasspath/p:path
指定目录,JAR文件和ZIP归档文件的列表,并用分号(;)分隔,以使其位于默认引导程序类路径的最前面
不要部署使用此选项覆盖rt.jar中的类的应用程序,因为这违反了JRE二进制代码许可证
-Xcheck:jni
对Java本机接口(JNI)功能执行其他检查
具体来说,它将在处理JNI请求之前验证传递给JNI函数的参数和运行时环境数据
遇到的任何无效数据都表明本机代码存在问题,在这种情况下,JVM将终止并出现不可恢复的错误。使用此选项时性能会下降
-Xcomp
在第一次调用时强制编译方法
默认情况下,客户端VM(-client)执行1,000个解释方法调用,服务器VM(-server)执行10,000个解释方法调用,以收集信息以进行有效的编译
指定-Xcomp选项会禁用解释的方法调用, 从而以提高效率为代价来提高编译性能
您还可以使用如下示例选项在编译之前更改解释方法的调用次数
-XX:CompileThreshold
-Xdebug
什么也不做。提供向后兼容性
-Xdiag
显示其他诊断消息
-Xfuture
启用严格的类文件格式检查,以强制严格遵守类文件格式规范
鼓励开发人员在开发新代码时使用此标志, 因为更严格的检查将成为未来版本的默认做法
-Xint
以仅解释模式运行应用程序
禁用对本机代码的编译,所有字节码都由解释器执行。在这种模式下,JIT编译器提供的性能优势是不存在的
-Xinternalversion
显示比-version选项更详细的JVM版本信息然后退出
-Xloggc:filename
设置应将详细的GC事件信息重定向到该文件以进行日志记录的文件
写入此文件的信息与 -verbose:gc 的输出类似,只是从每个记录的事件之前的第一个GC事件以来经过的时间
如果两者都使用相同的Java命令给出,则 -Xloggc 选项将覆盖 -verbose:gc
示例
-Xloggc:garbage-collection.log
-Xmaxjitcodesize=size
指定JIT编译代码的最大代码缓存大小(以字节为单位)
字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节
默认的最大代码高速缓存大小为240 MB;默认值为0
如果使用选项 -XX:-TieredCompilation 禁用分层编译,则默认大小为48 MB:
-Xmaxjitcodesize=240m
此选项等效于 -XX:ReservedCodeCacheSize
-Xmixed
由解释器执行所有字节码,但热方法除外,后者被编译为本机代码
-Xmnsize
设置年轻代(nursery)的堆的初始大小和最大大小(以字节为单位)
字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节
堆的年轻代区域用于新对象。与其他区域相比,在该区域执行GC的频率更高
如果年轻一代的大小太小,则会执行许多次要的垃圾回收
如果大小太大,那么将仅执行完整的垃圾收集,这可能需要很长时间才能完成
Oracle建议您将年轻代的大小保持在整个堆大小的一半到四分之一之间
以下示例说明如何使用各种单位将年轻代的初始大小和最大大小设置为256 MB
-Xmn256m
-Xmn262144k
-Xmn268435456
可以使用-XX:NewSize设置初始大小,使用-XX:MaxNewSize设置最大大小,而不用-Xmn选项来设置年轻一代的堆的初始大小和最大大小
-Xmssize
设置堆的初始大小(以字节为单位)
此值必须是1024的倍数且大于1 MB
字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节
以下示例说明如何使用各种单位将分配的内存大小设置为6 MB
-Xms6291456
-Xms6144k
-Xms6m
如果未设置此选项,则初始大小将设置为为老年代和年轻代分配的大小之和
可以使用 -Xmn 选项或 -XX:NewSize 选项来设置年轻一代的堆的初始大小
-Xmxsize
指定内存分配池的最大大小(以字节为单位)
此值必须是1024的倍数且大于2 MB
字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节
默认值是在运行时根据系统配置选择的
对于服务器部署,通常将-Xms和-Xmx设置为相同的值
请参阅《 Java SE HotSpot虚拟机垃圾收集优化指南》中的“Ergonomics”部分
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html#ergonomics
下面的示例演示如何使用各种单位将分配的最大内存大小设置为80 MB
-Xmx83886080
-Xmx81920k
-Xmx80m
-Xmx选项等效于 -XX:MaxHeapSize
-Xnoclassgc
禁用类的垃圾收集(GC)。这样可以节省一些GC时间,从而缩短了应用程序运行期间的中断时间
在启动时指定-Xnoclassgc时,应用程序中的类对象在GC期间将保持不变,并且始终被认为是活动的
这可能导致更多的内存被永久占用,如果不谨慎使用,将抛出内存不足异常
-Xprof
概要分析正在运行的程序,并将概要分析数据发送到标准输出
此选项作为实用程序提供,在程序开发中很有用,并不打算在生产系统中使用
-Xrs
减少JVM对操作系统信号的使用
即使JVM突然终止,关闭挂钩也可以通过在关闭时运行用户清理代码(例如关闭数据库连接)来有序关闭Java应用程序
JVM监视控制台控制事件,以实现用于异常终止的关闭钩子
具体地说,JVM注册了一个控制台控制处理程序,该处理程序开始进行关机挂钩处理并返回 CTRL_C_EVENT 为TRUE, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, and CTRL_SHUTDOWN_EVENT
JVM使用类似的机制来实现转储线程堆栈的功能,以进行调试
JVM使用CTRL_BREAK_EVENT执行线程转储
如果JVM作为服务运行(例如,作为Web服务器的servlet引擎),则它可以接收CTRL_LOGOFF_EVENT,但不应启动关机,因为操作系统实际上不会终止该进程
为避免此类干扰,可以使用 -Xrs 选项。使用 -Xrs 选项时,JVM不会安装控制台控制处理程序,这意味着它不会监视或处理CTRL_C_EVENT,CTRL_CLOSE_EVENT,CTRL_LOGOFF_EVENT或CTRL_SHUTDOWN_EVENT
指定 -Xrs 有两个结果:
- Ctrl + Break线程转储不可用
- 用户代码负责导致关机挂钩运行,例如,当终止JVM时,通过调用System.exit()来执行
-Xshare:mode
设置类数据共享(CDS)模式。此选项的可能模式参数包括
- auto
- 如果可能的话,使用CDS。这是Java HotSpot 32位客户端虚拟机的默认值
- on
- 要求使用CDS。如果不能使用类数据共享,则打印错误消息并退出
- off
- Java HotSpot 32-Bit Server VM, Java HotSpot 64-Bit Client VM, and Java HotSpot 64-Bit Server VM. 的默认值。不要使用CDS
- dump
- 手动生成CDS存档。按照“设置类路径”中的说明指定应用程序类路径. 您应该在每个新的JDK版本中重新生成CDS存档, 设置类路径
https://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html#CBHHCGFB
-XshowSettings:category
显示设置并继续。此选项的可能类别参数包括
- all
- 显示所有类别的设置。这是默认值
- locale
- 显示与区域设置相关的设置
- properties
- 显示与系统属性相关的设置
- vm
- 显示JVM的设置
-Xsssize
设置线程堆栈大小(以字节为单位)
附加字母k或K表示KB,m或M表示MB,g或G表示GB。默认值取决于虚拟内存
下面的示例以不同的单位将线程堆栈大小设置为1024 KB
-Xss1m
-Xss1024k
-Xss1048576
此选项等效于
-XX:ThreadStackSize
-Xverify:mode
设置字节码验证器的模式
字节码验证可确保正确构建类文件并满足Java虚拟机规范中第4.10节“验证类文件”中列出的约束
https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.10
不要关闭验证,因为这会降低Java提供的保护,并可能由于类文件格式不正确而导致问题
此选项的可能模式参数包括
- remote
- 验证引导类装入器未装入的所有字节码。如果不指定 -Xverify 选项,这是默认行为
- all
- 启用所有字节码的验证
- none
- 禁用所有字节码的验证。不支持使用 -Xverify:none