有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    你不能强迫JVM归还内存。这些设置是建议性的

    此外,您可能会发现JVM需要执行一个或多个full垃圾收集,然后才能决定是否可以返回内存