在我的情况下,这个值通常与我指定的-Xmx
不同。
对于-Xmx810M
,它返回了821035008
783MB
。根据各种(非真正可靠的)来源,它应该完全返回-Xmx
参数指定的值。
我寻找:
-Xmx
maxMemory()
不准确的可靠来源答案 0 :(得分:6)
根据http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4391499(来自2001年,所以它可能在较新版本的JVM中有所改变):
“-Xmx标志的解释依赖于VM。有些VM, 包括HotSpot在内,强制执行此选项有效值的下限。“
正如之前的回答所述,MaxMemory是准确的,而Xmx标志只是一个建议。
上面的链接是通过SO上的earlier similar question的答案找到的。
如果你想找到用户指定的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));
}
答案 1 :(得分:1)
Runtime.maxMemory()是准确的。它不是-Xmx
选项。它的不准确程度取决于版本,我不确定它是什么提示而不是精确设置。
当totalMemory()与你的maxMemory()匹配时,你的内存不足。