将内存从JVM返回到OS

时间:2013-11-18 14:11:59

标签: java memory-management

我有一个Java应用程序,它在启动后的第一分钟内分配大量内存。然后再运行30分钟,但几乎不需要任何记忆。我想将未使用的内存返回给操作系统。

我分析了应用程序,它在第一分钟分配了大约200 MB。然后190 MB被垃圾收集,但该过程仍然挂起到200 MB,直到该过程终止。它永远不会向操作系统返回任何内存(在我的情况下是Linux),除了少量的M​​B。

如何强制JVM将未使用的内存返回给操作系统?

有几个人已经在stackoverflow问了同样的问题。通常的答案是使用JVM选项-XX:MinHeapFreeRatio=x-XX:MaxHeapFreeRatio=y。我尝试了几种不同的价值组合,但没有区别。

这就是这些选项的工作原理,正如我所理解的:如果垃圾收集后有超过MaxHeapFreeRatio的可用内存,JVM 可能将内存返回给操作系统。出于某种原因,我的JVM似乎不想这样做。我尝试了不同的垃圾收集器(-XX:+UseParallelGC等)但没有成功。

1 个答案:

答案 0 :(得分:1)

你不能强制 JVM来回馈内存。这些设置是建议性的。

此外,您可能会发现JVM需要先执行一个或多个完整垃圾收集,然后才能确定它可以回馈内存。