我通过将最大内存指定为 128MB 来启动我的程序
java -Xmx128M ...
然后我用 jconsole 连接到 jvm 实例。在“VM Summary”选项卡中,我发现:
Maximum heap size: 127,808 kbytes
该值小于我在命令行中指定的值。任何人都可以给我一些提示吗?
我通过将最大内存指定为 128MB 来启动我的程序
java -Xmx128M ...
然后我用 jconsole 连接到 jvm 实例。在“VM Summary”选项卡中,我发现:
Maximum heap size: 127,808 kbytes
该值小于我在命令行中指定的值。任何人都可以给我一些提示吗?
我检查了Java Visual VM报告的值。这正是我配置为 JVM 参数的内容:
例子
JVM argument: 1024m
Heap Max: 1.073.741.824 B
所以我猜 jconsole 有一种特殊的计算或 Java Visual VM 将值调整为配置的 JVM 参数 - 谁知道?
我发现确切的内存大小要小一些。根据 Java 和操作系统的版本,可以缩小多少。我怀疑有一些实施原因导致它不是您所要求的。
顺便说一句:这只是堆大小的最大值。还有许多其他内存区域,例如线程堆栈、直接内存、perm gen、共享库、本机资源和内存映射文件,它们不包括在内,所以我不会太担心,因为这之间有很大的误差范围值和应用程序将使用的最大内存。
BTW2:现在最大128m相当小。它这么小有充分的理由吗?
引用以下Java 错误报告:
不是错误。-Xmx 标志的解释取决于 VM。包括 HotSpot 在内的一些 VM 会对该选项的有效值实施一个下限。CCC 提案不应该以这种方式提到 -Xmx 标志。