如何检测-Xmx param的实际值?Runtime.getRuntime().maxMemory()不准确

Łuk*_*man 3 java memory jvm

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

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

我在找:

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

小智 6

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

"-Xmx标志的解释依赖于VM.某些VM(包括HotSpot)强制执行此选项有效值的下限."

因此,正如前面的答案所述,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));
}
Run Code Online (Sandbox Code Playgroud)