Java 运行时读取最大堆空间

Java 运行时读取最大堆空间,java,heap,Java,Heap,众所周知,java-Xmx选项用于设置java程序可用的最大堆空间。但是Java程序有没有办法读取已设置的值呢?类似于System.getMaximumHeapSpace()(它不存在)。有一个,文档说它将返回Java虚拟机尝试使用的最大内存量,但它是否是启动JVM时设置的最大堆内存并没有具体说明 作为测试,我编写了以下程序: class MaxMemory { public static void main(String[] args) { System.out.pri

众所周知,
java-Xmx
选项用于设置java程序可用的最大堆空间。但是Java程序有没有办法读取已设置的值呢?类似于
System.getMaximumHeapSpace()
(它不存在)。

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

作为测试,我编写了以下程序:

class MaxMemory {
    public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().maxMemory());
    }
}
执行结果如下:

C:\coobird\>java -Xmx64m MaxMemory
66650112

C:\coobird\>java -Xmx128m MaxMemory
133234688
这是在Windows上使用JavaSE6版本1.6.012


尽管这些值接近64 MB(67108864字节)和128 MB(134217728字节),但事实并非如此。

我已经对其进行了测试,它似乎是由-Xmx设置的值。谢谢。它看起来很接近,但不是确切的值。可能缺少的字节是为PermGen spaceDuplicate保留的?一种非编程方式是运行JDK提供的
jmap
实用程序。语法应该是
jmap-heap
。字段
MaxHeapSize
指示在该Java进程上设置的
Xmx
值。