【问题标题】:Difference between -xms and -xmx argument for java command [duplicate]java命令的-xms和-xmx参数之间的区别[重复]
【发布时间】: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


【解决方案1】:

如果您使用 Linux,这可能是因为在进程写入内存之前,内存并未物理分配给进程,即使进程已分配内存。

【讨论】: