在运行时读取最大堆空间

D-B*_*Bug 16 java heap

众所周知,该java -Xmx选项用于设置Java程序可用的最大堆空间.但有没有办法让Java程序读取已设置的值?像System.getMaximumHeapSpace()(不存在)的东西.

coo*_*ird 24

Runtime.maxMemory文档中说有一个将返回Java虚拟机将尝试使用的最大内存量,但是它是否是启动JVM时设置的最大堆内存量并不具体.

就像测试一样,我编写了以下程序:

class MaxMemory {
    public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().maxMemory());
    }
}
Run Code Online (Sandbox Code Playgroud)

执行结果如下:

C:\coobird\>java -Xmx64m MaxMemory
66650112

C:\coobird\>java -Xmx128m MaxMemory
133234688
Run Code Online (Sandbox Code Playgroud)

这是在Windows上使用Java SE 6版本1.6.0_12.

尽管这些值接近64 MB(67,108,864字节)和128 MB(134,217,728字节),但它们并非如此.

  • 看起来很接近,但不完全是这个值。 (2认同)