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

Sel*_*amy 8 java memory jvm memory-management

我们的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
Run Code Online (Sandbox Code Playgroud)

Evg*_*eev 3

您可以尝试调整 -XX:MaxHeapFreeRatio,它是“GC 后堆空闲的最大百分比,以避免收缩”。默认值 = 70