Java GC堆大小和程序内存开销

Java GC堆大小和程序内存开销,java,memory,garbage-collection,overhead,heap-size,Java,Memory,Garbage Collection,Overhead,Heap Size,我正在试图弄清楚我的应用程序发生了什么 问题: GC调用并没有像应该的那样减少未使用的堆大小,但它应该这样做,因为我使用的是串行GC(或UseParNewGC)和一个积极的堆比率 使用中的程序内存总是比当前使用和未使用的堆大得多,在我看来,即使包括其他JVM内存+堆,也太多了 使用的命令行: java -XX:+UseSerialGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -Xmx2500M -cp XXXXXX.jar xxxx.xx

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

问题:

  • 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内存+4GB交换文件 2.99GHZ Java1.7+JDK1.7

请看图片,让事情更清楚:

不要设置自由比率,而是尝试将新一代的
设置为能够使短寿命对象消亡的大小。尝试将尽可能少的产品推广到
老一代

请记住,大型
年轻一代
会变成大型收藏


然后将最大
旧一代
设置为一个不需要太长时间就能装满
GC
但不会持续运行的大小。

您想实现什么?