3

在我的情况下,这个值通常与-Xmx我指定的不同。

对于-Xmx810M它返回821035008的是783MB. 根据各种(不是真正可靠的)来源,它应该完全返回参数指定的值-Xmx

我在找:

  1. 找到确切值的一些可靠方法-Xmx
  2. 一些可靠的来源将证明maxMemory()不准确
4

2 回答 2

6

根据http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4391499(从 2001 年开始,因此它可能在较新版本的 JVM 中发生了变化):

“-Xmx 标志的解释取决于 VM。包括 HotSpot 在内的一些 VM 对该选项的有效值实施了一个下限。”

因此,正如前面的答案所述,MaxMemory 是准确的,而 Xmx 标志只是一个建议。

上面的链接是通过对之前关于 SO的类似问题的回答找到的。

如果你想找到 Xmx 的用户指定值,如果使用 Sun (ahem, Oracle) JVM/,你可以简单地大致执行以下操作:

String commandLineInput = System.getProperty("sun.java.command");
Pattern pattern = Pattern.compile("-Xmx(\\w*)");
Matcher matcher = pattern.matcher(commandLineInput);
while(matcher.find()) {
  System.out.println(matcher.group(1));
}
于 2013-09-05T07:05:28.330 回答
1

Runtime.maxMemory() is accurate. It is the -Xmx option which is not. How inaccurate it is depends on the version and I not sure what it is more of a hint than a precise setting.

When the totalMemory() matches your maxMemory() you are out of memory.

于 2013-09-05T06:59:14.333 回答