在我的情况下,这个值通常与-Xmx
我指定的不同。
对于-Xmx810M
它返回821035008
的是783MB
. 根据各种(不是真正可靠的)来源,它应该完全返回参数指定的值-Xmx
。
我在找:
- 找到确切值的一些可靠方法
-Xmx
- 一些可靠的来源将证明
maxMemory()
不准确
根据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));
}
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.