JVM 参数

本文详细介绍了JVM参数的分类,包括标准参数(如-classpath和-client/server模式)、非标准参数(如-Xint和-Xmx)以及高级运行时参数(如-XX:MaxDirectMemorySize),并强调了布尔类型和值类型的区别以及如何正确设置它们。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JVM 参数类型大致分为以下几类:

  • 标准参数(-):保证在所有的 JVM 实现都支持的参数
  • 非标准参数(-X):通用的,特定于 HotSpot 虚拟机的参数,这些参数不保证在所有 JVM 实现中被支持,且可能会更改
  • 高级运行时参数(-XX):此类参数不建议随意使用,这些参数用于调整 HotSpot VM 的特定区域,不保证所有的 JVM 实现都支持,并且可能会发生改变

参数分为布尔类型和值类型,布尔类型被用于启用默认禁用的特性,或者禁用默认启动的特性,这类参数不用指定值,使用 + 号来启动参数如 -XX:+OptionName,使用 - 号来禁用布尔如 -XX:-OptionName

值类型的参数可以使用 :或者 = 来分隔参数名和参数值,或者值直接跟在参数后面,如果参数值要指定字节大小,你可以不使用后缀,或者使用 k/K 来表示 KB,使用 m/M 来表示 MB,使用 g/G 来表示 GB,如果参数值要指定百分比,你需要使用 0-1 的数字,比如 0.25 表示 25%。

标准参数

标准参数,可以理解为 java 命令的可选项,可以使用 java 命令查看标准参数:
在这里插入图片描述
标准参数的含义:

参数含义
-classpath/-cp类搜索路径,可以使用目录或者 zip/jar 文件的路径,多个用 ;分隔
-D<name>=<value>设置系统属性
-client设置 jvm 使用 client 模式,特点是启动速度比较块,但运行时性能和内存管理效率不高,通常用于客户端应用程序或 PC 应用开发和调试
-server设置 jvm 使用 server 模式,默认就是 server 模式,特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境
-verbose:[class|gc|jni]启动详细输出
-X输出非标准参数的帮助文档

非标准参数

非标准参数是特定于 HotSpot VM 的通用参数,可以使用 java -X 命令查看,不同 JDK 版本可能会有不同。

在这里插入图片描述
非标准参数的含义:

参数名含义
-Xint以仅解释模式运行应用程序。对本地代码的编译被禁用,所有字节码都由解释器执行。JIT 编译器提供的性能优势在这种模式下并不存在
-Xmixed由解释器执行所有字节码,hot method 除外,后者被由 JIT 编译成本地代码
-Xincgc开启增量 gc(默认为关闭),这有助于减少长时间 GC 时应用程序出现的停顿,但由于可能和应用程序并发执行,所以会减低 CPU 对应用的处理能力
-Xloggc:file-verbose:gc 功能类似,只是将每次 GC 事件的相关情况记录到一个文件中,文件的位置最好在本地,以避免网络的潜在问题。
-Xms设置堆的初始容量和最小容量,它必须时 1024 的倍数且不能小于 1M,需要注意的是 -XX:InitalHeapSize 也可以指定堆初始容量,如果这两个都出现在命令行中,则以最后一个参数为准
-Xmx指定堆的最大容量,它必须时 1024 的倍数且不能小于 2M,它等价于 -XX:MaxHeapSize 参数
-Xss设置线程堆栈的容量,默认值依赖于操作系统,它类似于 -XX:ThreadStackSize
-Xmn新生代的初始容量和最大容量,此处的大小指的是 eden+2*surivor sapce,你也可以使用 -XX:NewSize 设置初始容量,使用 -XX:MaxNewSize 设置最大容量,如果都出现在命令行中则以最后一个参数为准

高级运行时参数

这些参数控制 HotSpot VM 的运行时行为。

参数名含义
-XX:MaxDirectMemorySize=size设置 NIO 中直接内存的最大空间,可以使用单位如 k、m、g,默认情况下为 0,这表示 JVM 自动选择 NIO 直接内存的大小
-XX:+PrintCommandLineFlags打印在命令行中指定的参数
-XX:ThreadStackSize=size设置 Java 线程堆栈大小
-XX:+HeapDumpOnOutOfMemoryError当出现 OOM 时,在当前目录生成堆转储文件,默认关闭
-XX:HeapDumpPath=path当 -XX:+HeapDumpOnOutOfMemoryError 启用后,生成堆转储文件的路径,默认情况下在当前目录下生成,文件名为 java_pid${pid}.hprof,你可以自定义文件名:-XX:HeapDumpPath=/var/log/java/java_heapdump.hprof
-XX:LogFile=path设置 HotSpot 的日志文件路径,默认生成在当前工作目录,名为 hotspot.log
-XX:InitialHeapSize=size设置堆的初始容量
-XX:MaxHeapSize=size设置堆的最大容量
-XX:MaxNewSize=size设置新生代的最大容量
-XX:+PrintGC打印 GC 事件,默认禁用
-XX:+PrintGCDetails打印 GC 事件的详细信息,默认禁用
-XX:SurvivorRatio=ratio设置 eden/survivor 的比值,默认值为 8
-XX:+UseConcMarkSweepGC使用 GMS 垃圾收集器收集老年代
-XX:+UseG1GC使用 G1 垃圾收集器
-XX:+UseParallelGC使用 parallel scavenge 垃圾收集器
-XX:+UseParallelOldGCfull gc 使用 parallel 垃圾收集器,默认禁用,当启用 -XX:+UseParallelGC 时自动启用
-XX:+UseParNewGC在新生代中使用 parallel thread 垃圾收集器,默认禁用,当启用 -XX:+UseConcMarkSweepGC 时自动启用
-XX:+UseSerialGC使用 serial 垃圾收集器

参考:
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BABDJJFI

https://juejin.cn/post/7033554940677062670

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值