如何减少 JVM 中提交的堆内存

How to reduce committed heap memory in JVM

我们的 JVM 消耗的内存比预期的要多。我们做了一些分析,发现没有泄漏。使用的堆内存最多可达 2.9 GB,但在空闲时间会降至 800 MB。但是提交的堆增加到 3.5 GB(有时是 4 GB)并且从未下降。同样在空闲时间之后,当使用的堆从 800 MB 增加时,提交的堆内存从 3.5 GB 增加。所以我们的服务器很快就会达到最大内存大小,我们必须每隔一天重新启动它们。

我的问题是

  1. 我的理解是提交的堆内存是当前分配的内存。当使用的堆内存减少时,为什么提交的内存也没有减少?
  2. 当使用的堆内存从其级别 (800 MB) 增加时,提交的堆内存也会从其级别(从 3.5GB)增加

我们的服务器有以下内存设置:

-Xmx4096M -Xms1536M -XX:PermSize=128M -XX:MaxPermSize=512M

您可以尝试调整 -XX:MaxHeapFreeRatio 为 "maximum percentage of heap free after GC to avoid shrinking"。默认值 = 70