【发布时间】:2025-12-09 10:45:01
【问题描述】:
我正在运行 6 个 java 进程。我已将每个进程的 -Xms 和 -Xmx 参数设置为 1 GB。所以总堆分配为 6 GB。 我有 8 GB 物理内存。所以在启动这 6 个进程后,“free”命令应该显示 6 GB 已使用,剩余 2 GB,但事实并非如此。 相反,“免费”显示仅使用了 1 GB,而 7 GB 是免费的。 我有点困惑,因为我对 -Xms(A MB) 的理解是操作系统为 JVM 分配了 A MB 的内存,而 -Xmx (B MB) 意味着 JVM 可以扩展到 B MB。 在我的情况下,A 和 B 都是相同的。 请在这里帮忙。
【问题讨论】:
-
物理内存与虚拟内存有相当间接的联系。在堆上没有任何分配之前,它不会占用物理内存(内存页面未提交)。
-
这不是完全重复的。文档没有明确说明,我也不打算深入研究 JVM 源代码,但可能是 JVM 最初并未从操作系统分配整个初始堆。
-
@chrylis java 进程为自己请求 Xms 内存,但这并不意味着实际占用了这么多物理 RAM。都是虚拟内存。
标签: java jvm-arguments