3

我试图弄清楚我的应用程序发生了什么。

问题:

  • GC 调用并没有尽可能地减少未使用的堆大小,但它应该是因为我使用的是串行 GC(或 UseParNewGC)和积极的堆比率。

  • 程序使用中的内存总是比当前使用和未使用的堆大很多,我认为即使包含其他 JVM 内存 + 堆也太大了

使用的命令行:

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

尝试使用 UseParNewGC,结果相同

系统:Win7 SP1 4GB RAM + 4GB 交换文件 2.99GHZ Java 1.7 + JDK 1.7

请看图片让事情更清楚:http: //i.stack.imgur.com/i3sxw.jpg

4

1 回答 1

1

与其设置自由比率,不如尝试将其设置为New Generation能够使短期对象死亡的大小。试图尽可能少地向Old Generation.

请记住,Young Generation大件变成了大件收藏品。

然后将最大值设置为Old Generation不会花费太长时间才能满GC但不会持续运行它们的大小。

于 2012-09-17T14:41:18.947 回答