2012-07-28 59 views
3

我想弄清楚我的應用程序發生了什麼。GC堆大小和程序內存開銷

問題:

  • GC調用不會減少未使用的堆的大小一樣,因爲它應該,但它應該,因爲我使用的串行GC(或UseParNewGC)和侵略性堆比。

  • 程序的使用內存總是比當前使用和未使用的堆大很多,太多在我看來,即使與其他JVM內存包含+堆用

命令行:

java -XX:+UseSerialGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -Xmx2500M -cp XXXXXX.jar xxxx.xxxx.xxxx 
pause 

與UseParNewGC試過,相同的結果

系統:Win7的 小號P1 4GB內存+ 4GB交換文件 2.99GHZ 的Java 1.7 + JDK 1.7

請看圖片,使事情更清楚: http://i.stack.imgur.com/i3sxw.jpg

+0

你想達到什麼目的? – ssedano 2012-09-17 14:38:23

回答

1

而不是自由設定比例,嘗試將New Generation設置爲一個大小使短暫的對象死亡。試圖儘可能少地推廣到Old Generation

請記住,大型Young Generation變成大集合。

然後將最大Old Generation設置爲不需要太長時間才能填滿的大小GC但不會持續運行它們。