2011-11-16 33 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

相關問題