无论Xms=Xmx与否,Java max内存都是不同的

无论Xms=Xmx与否,Java max内存都是不同的,java,memory,jvm,Java,Memory,Jvm,运行以下主要方法: public class Test { public static void main(String[] args) { System.out.println(Runtime.getRuntime().maxMemory() / (1024.0d * 1024.0d)); } } 与: -Xmx6G的结果是输出5461.5 -Xmx6G-Xms6G导致输出5888.0 为什么它们不同 我正在Windows上运行Java HotSpot(TM)

运行以下主要方法:

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

  • -Xmx6G的结果是输出5461.5
  • -Xmx6G-Xms6G导致输出5888.0
  • 为什么它们不同


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

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

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

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

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

    diff