最常用方式是用runtime.getruntime()获取堆内存初始值和最大值:totalmemory()返回初始堆大小(等效-xms),maxmemory()返回最大堆大小(等效-xmx),单位字节,可转mb/gb;未显式设置时默认值按物理内存比例自动计算,-xms≈1/64、-xmx≈1/4;也可通过jinfo、jstat或java -xx:+printcommandlineflags验证。

可以直接用 Runtime 类获取当前 JVM 实际生效的堆内存初始值和最大值,这是最常用、最轻量的方式。
用 Runtime.getRuntime() 获取运行时堆信息
Java 提供了标准 API,无需额外依赖或命令行工具,适合在程序中动态检查:
-
Runtime.getRuntime().totalMemory():返回 JVM 当前已向操作系统申请并初始化的堆内存大小(即等效于-Xms设置值,或默认值) -
Runtime.getRuntime().maxMemory():返回 JVM 堆内存可扩展到的上限(即等效于-Xmx设置值,或默认值) - 注意:这两个值单位是字节,建议转为 MB 或 GB 方便阅读
示例代码:
public static void main(String[] args) {
long initial = Runtime.getRuntime().totalMemory() / 1024 / 1024;
long max = Runtime.getRuntime().maxMemory() / 1024 / 1024;
System.out.println("-Xms ≈ " + initial + " MB");
System.out.println("-Xmx ≈ " + max + " MB");
}
通过 JVM 启动参数反推默认值
若未显式设置 -Xms 和 -Xmx,JVM 会按物理内存比例自动计算:
-
-Xms默认 ≈ 物理内存的 1/64(但不低于 12MB,且 32 位系统通常不超 1.5GB) -
-Xmx默认 ≈ 物理内存的 1/4(同样受系统限制) - 可通过
java -XX:+PrintCommandLineFlags -version查看 JVM 实际采用的默认堆参数(含自动推导后的值)
用 jinfo 查看正在运行的 Java 进程参数
适用于已启动、无法改代码的生产环境:
- 先用
jps -l获取目标 Java 进程 PID - 再执行
jinfo -flag InitialHeapSize <pid></pid>和jinfo -flag MaxHeapSize <pid></pid> - 输出如
-XX:InitialHeapSize=536870912(即 512MB),直接对应-Xms的实际值
用 jstat 实时观察堆使用情况
虽然不直接显示配置值,但能验证当前堆是否按预期工作:
-
jstat -gc <pid></pid>输出中:init列是初始堆大小(单位 KB),max列是最大堆大小 - 该结果与
Runtime.maxMemory()和totalMemory()一致,可用于交叉验证
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











