2012-07-28 47 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但不会持续运行它们。