【发布时间】:2015-04-23 14:27:49
【问题描述】:
我们的 JVM 消耗的内存比预期的要多。我们做了一些分析,发现没有泄漏。使用的堆内存最大达到 2.9 GB,但在空闲时间下降到 800 MB。但是提交的堆增加到 3.5 GB(有时是 4 GB)并且永远不会下降。同样在空闲时间之后,当使用的堆从 800 MB 增加时,提交的堆内存从 3.5 GB 增加。所以我们的服务器很快就会达到最大内存大小,我们必须每隔一天重新启动它们。
我的问题是
- 我的理解是提交的堆内存是当前分配的内存。当使用的堆内存减少时,为什么提交的内存也没有减少?
- 当使用的堆内存从其级别(800 MB)增加时,提交的堆内存也从其级别(从 3.5GB)增加
我们的服务器中有以下内存设置:
-Xmx4096M -Xms1536M -XX:PermSize=128M -XX:MaxPermSize=512M
【问题讨论】:
-
Committed表示jvm分配的;您的最大堆大小为 4gigs,因此,在需要时,提交的内存会上升到该阈值。然后它可能返回给系统,但在你的情况下,jvm 可能不觉得有必要这样做。
-
我只会给 JVM 你可用的内存量,例如也许 3 GB,然后你不需要重新启动它。
标签: java memory memory-management jvm