java将内存从JVM返回到操作系统
我有一个Java应用程序,它在启动后的第一分钟分配大量内存。然后再运行30分钟,但几乎不需要内存。我想将未使用的内存返回操作系统
我分析了应用程序,它在第一分钟就分配了大约200 MB的内存。然后对190MB进行垃圾收集,但进程仍保留其200MB,直到进程终止。它从不向操作系统返回任何内存(在我的例子中是Linux),除了少量的MBs
如何强制JVM将未使用的内存返回操作系统
在stackoverflow,已经有几个人提出了同样的问题。通常的答案是使用JVM选项-XX:MinHeapFreeRatio=x
和-XX:MaxHeapFreeRatio=y
。我尝试过几种不同的值组合,但它们没有区别
正如我所理解的,这些选项就是这样工作的:如果垃圾收集后的可用内存超过MaxHeapFreeRatio,JVM可能会将内存返回操作系统。出于某种原因,我的JVM似乎不想这样做。我尝试了不同的垃圾收集器(-XX:+UseParallelGC
等),但没有成功
# 1 楼答案
你不能强迫JVM归还内存。这些设置是建议性的
此外,您可能会发现JVM需要执行一个或多个full垃圾收集,然后才能决定是否可以返回内存