标准参数(-)
所有的 JVM 实现都必须实现这些参数的功能
向后兼容
-version
-help
详细信息参阅 (此信息为下面指令提供)

非标准参数(-X):
默认jvm实现这些参数的功能,但并不保证所有jvm实现都满足
不保证向后兼容
-Xint
-Xmixed
下面指令提示:
-X 选项是非标准选项。如有更改,恕不另行通知。

非Stable参数(-XX)
此类参数各个jvm实现会有所不同
将来可能会随时取消
XX 参数主要分为两种
boolean 型
通常写作 -XX:+xxx 或 -XX:-xxx,表示开启或关闭 xxx,如:
-XX:+PrintGCDetails
-XX:-UseParallelGC
KV 型
即键值对形式,通常写作 -XX:key=value,如:
-XX:MetaspaceSize=20m
详细指令参考 基础 | JDK - [指令]
查看 java 进程号
jps -l
查看 JVM 所有参数的实际值
java -XX:+PrintFlagsFinal
字段依次为

查看 JVM 所有参数的初始值
java -XX:+PrintFlagsInitial
查看所有改动过的 XX 参数
jinfo -flags 进程号
Non-default VM flags 中参数是系统改动过的参数
Command line 中参数是认为改动过的参数

查看所有命令行参数
java -XX:+PrintCommandLineFlags

看具体某具体 XX 参数
jinfo -flag 参数名 进程号


查看具体 X 参数
无法直接查看,但可以通过查看堆的信息获取
jmap -heap 进程号
信息如下
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 4219469824 (4024.0MB)
NewSize = 88080384 (84.0MB)
MaxNewSize = 1406140416 (1341.0MB)
OldSize = 176160768 (168.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 66060288 (63.0MB)
used = 9248656 (8.820205688476562MB)
free = 56811632 (54.17979431152344MB)
14.000326489645337% used
From Space:
capacity = 11010048 (10.5MB)
used = 0 (0.0MB)
free = 11010048 (10.5MB)
0.0% used
To Space:
capacity = 11010048 (10.5MB)
used = 0 (0.0MB)
free = 11010048 (10.5MB)
0.0% used
PS Old Generation
capacity = 176160768 (168.0MB)
used = 0 (0.0MB)
free = 176160768 (168.0MB)
0.0% used
通过 java 代码查看内存
public static void main(String[] args) throws InterruptedException {
System.out.println("JVM params");
System.out.println(Runtime.getRuntime().freeMemory());
System.out.println(Runtime.getRuntime().maxMemory());
System.out.println(Runtime.getRuntime().totalMemory());
TimeUnit.SECONDS.sleep(Integer.MAX_VALUE);
}
说明
freeMemory() + totalMemory() 是JVM 虚拟机从操作系统分配的内存

maxMemory() 是允许 JVM 使用的最大的内存值
查看版本
-version

帮助
-help

堆初始容量
-Xms
初始堆大小,默认约 1/64 物理内存
与 -XX:InitialHeapSize 等价,实际属于 XX 参数
为避免 JVM 内存忽高忽低,通常与 -Xmx 一致
堆最大容量
-Xmx
最大堆大小,默认约 1/4 物理内存
与 -XX:MaxHeapSize 等价,实际属于 XX 参数
为避免 JVM 内存忽高忽低,通常与 -Xms 一致
新生代容量
-Xmn
与 -XX:MaxNewSize 等价,实际属于 XX 参数
通常,Eden:From:To:Old = 8:1:1:20
栈容量
-Xss
单个线程栈的内存大小, 1M,与系统和硬件有关
与 -XX:ThreadStackSize 等价,实际属于 XX 参数,其值为 0 时表示使用默认数值
每个线程的栈的大小,不是总大小
元空间大小
-XX:MetaspaceSize
类似以前的永久代,用于实现 JVM 规范中的方法区
但元空间直接使用本地内存,不在虚拟机中,因此默认只受本地内存影响
但是,元空间默认大小 20 M 左右,频繁创建对象时容易出现 OOM:Metaspace
因此此参数可以设大,比如取值 1024m
直接内存大小
-XX:MaxDirectMemorySize
不同于 -XX:MetaspaceSize ,此参数可以是 NIO 拥有更多的 Direct Buffer Memory
输出 GC 日志
-XX:+PrintGCDetails
会在发生 GC 或 Full GC 时输出 GC 日志
GC 日志参考 基础 | JVM - [GC]

GC 日志如下图

FROM / TO 区比例
-XX:SruvivorRatio
实际值使用的是 Eden 对 FROM / TO 的倍数
即
-XX:SruvivorRatio=8 时,Eden:FROM:TO = 8:1:1 (默认比例)
-XX:SruvivorRatio=6 时,Eden:FROM:TO = 6:1:1
Eden 区比例
-XX:NewRatio
实际值使用的是 Old 对 Eden 的倍数
即
-XX:NewRatio=2 时,Old:Eden = 2:1 (默认比例)
-XX:NewRatio=1 时,Old:Eden = 1:1
传说
在默认的并行垃圾回收期配置下,一直使用默认配置,用户指定无效
最大对象年龄
-XX:MaxTenuringThreshold
指一个对象经历多少次垃圾回收后,若依然存活,则进入老年代
此值取值范围为 [0,15],默认 15
查看 JVM 所有参数的实际值
见 查看 JVM 所有参数的实际值
查看 JVM 所有参数的初始值
见 查看 JVM 所有参数的初始值
查看所有命令行参数
见 查看所有命令行参数
(16G 内存)
-XX:InitialHeapSize=128m
-XX:MaxHeapSize=4096m
-XX:MetaspaceSize=512m
-XX:ThreadStackSize=1m
-XX:+PrintGCDetails
(用于开启类指针压缩,默认开启)
-XX:+UseCompressedOops
-XX:+UseCompressedClassPointers
-XX:-UseLargePageIndividualAllocation
-XX:+PrintCommandLineFlags
(垃圾回收器)
-XX:+UseSerialGc