我有一个带有以下参数的 Java 应用程序,但即使总可用空间大于 45%(可以通过可视化 VM 看到),堆也不会被回收。 JVM 是否有任何理由不释放该堆空间?相同的设置在 Java6 中按预期工作。运行Java5运行时和编译时
java -jar -Xmx1024m -XX:MinHeapFreeRatio=15 -XX:MaxHeapFreeRatio=45 -XX:+HeapDumpOnOutOfMemoryError <myjarname>
最佳答案
我们相信我们已经找到了问题的答案。我们正在运行的系统是具有多个 CPU 的服务器类机器,JRE 正在检测多个 CPU 并将 GC 设置为使用并行而不是串行 GC,这与 XX:MaxHeapFreeRatio 设置不兼容。
关于Java5-XX :MaxHeapFreeRatio=45 doesn't release heap even when more than 45% of the heap is free,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8160445/