为什么JVM的运行时最大内存小于命令行-Xmx中指定的值?

时间:2012-04-10 08:03:56

标签: java

我通过将最大内存指定为128MB来启动程序

java -Xmx128M ...

然后我用jconsole连接到jvm实例。在“VM Summary”选项卡中,我发现:

Maximum heap size: 127,808 kbytes

此值小于我在命令行中指定的值。任何人都可以给我一些提示吗?

3 个答案:

答案 0 :(得分:2)

我检查了Java Visual VM报告的值。这正是我配置为JVM参数:

示例

JVM argument: 1024m
Heap Max: 1.073.741.824 B

所以我猜jconsole有一种特殊的计算方式,或者Java Visual VM将值调整为配置的JVM参数 - 谁知道?

答案 1 :(得分:1)

我发现确切的内存大小要小一些。根据Java和OS的版本,有多小的apepar会有所不同。我怀疑有一些实施原因,为什么它不正是你所要求的。

BTW:这只是堆大小的最大值。还有许多其他存储区域,例如线程堆栈,直接内存,perm gen,共享库,本机资源和内存映射文件,这些文件都没有包含在内,所以我不会太过分了,因为这个值和应用程序的最大内存之间存在很大的误差。将使用。

BTW2:这些天最大128米相当小。它有这么小的理由吗?

答案 2 :(得分:0)

引用以下Java bug report

  

不是错误。 -Xmx标志的解释取决于VM。一些   VM(包括HotSpot)强制实施有效值的下限   这个选项。 CCC提案不应该提到-Xmx   以这种方式举旗。