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

时间:2015-04-23 14:27:50

标签: java memory memory-management jvm

我们的JVM消耗的内存超出预期。我们做了一些分析,发现没有泄漏。使用的堆内存最大为2.9 GB,但在空闲时间内降至800 MB。但是承诺堆增加到3.5 GB(有时是4 GB)并且永远不会降低。此外,在空闲时间之后,当使用的堆从800 MB增加时,则提交的堆内存从3.5 GB增加。所以我们的服务器很快达到最大内存大小,我们必须每隔一天重新启动它们。

我的问题是

  1. 我的理解是已提交的堆内存当前已分配内存。当使用堆内存减少时,为什么提交的内存也不会减少?
  2. 当使用的堆内存从其级别(800 MB)增加时,提交的堆内存也会从其级别(从3.5GB)增加
  3. 我们的服务器中有以下内存设置:

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

1 个答案:

答案 0 :(得分:2)

您可以尝试调整-XX:MaxHeapFreeRatio,这是" GC之后的最大堆免费百分比,以避免收缩"。默认值= 70