2011-11-16 121 views
4

我有一个Java应用程序,下面有参数,但即使总空闲空间更大,堆也没有被回收比45%(可以通过视觉虚拟机看到)。是否有任何理由说JVM不会释放堆空间?相同的设置在Java6中按预期工作。运行Java5运行时和编译时间Java5 -XX:MaxHeapFreeRatio = 45即使有超过45%的堆空闲时也不会释放堆

java -jar -Xmx1024m -XX:MinHeapFreeRatio=15 -XX:MaxHeapFreeRatio=45 -XX:+HeapDumpOnOutOfMemoryError <myjarname> 
+0

Crossposted到Oracle的Java论坛:https://forums.oracle.com/forums/thread.jspa?threadID=2311208&tstart=0。 – EJP

+0

JVM很贪婪,有时需要运行两次主要的GC才能释放内存。 –

+0

由于Java 5.0的生命周期已经过去了几年,可能是更新到Java 6或7的时候了。 –

回答

7

我们相信我们已经找到了问题的答案。我们运行的系统是具有多个CPU的服务器级机器,JRE检测多个CPU并将GC设置为并行,而不是与XX:MaxHeapFreeRatio设置不兼容的串行GC。

2

,让记忆回到我的系统中唯一GC是G1GC -XX:+UseG1GC

+0

此博客条目另有建议 - http://javagc.blogspot.co.il/2013/03/java -hotspot-VM-足迹,optimization.html – Saar

相关问题