Java max memory是否为Xms = Xmx

时间:2016-08-04 12:11:19

标签: java memory jvm

运行以下主方法:

public class Test {
    public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().maxMemory() / (1024.0d * 1024.0d));
    }
}

使用:

  1. -Xmx6G导致输出5461.5
  2. -Xmx6G -Xms6G导致输出5888.0
  3. 他们为什么不同?

    我在Windows上运行Java HotSpot(TM)64位服务器VM 1.8.0_60。

1 个答案:

答案 0 :(得分:1)

Xmx配置托管堆的总大小的上限。这与可分配的java对象数量不同。

这是由于生成堆布局,堆的某些部分将始终未使用或仅暂时使用。例如。当收集器没有运行时,两个幸存者空间中的一个总是空的。

设置初始堆大小会影响其他设置,主要是代的相对大小,从而影响java对象的可用量。

要查看可以运行的实际受影响的设置

diff <(java -Xmx6G -XX:+PrintFlagsFinal) <(java -Xmx6G -Xms6G -XX:+PrintFlagsFinal)