I have an application that cause to creating lots of garbage. First (and almost one) criteria is low GC pause time. I try different GC parameters using visualgc tool (and gc logs). Best parameters are below.
-XX:+UseConcMarkSweepGC
-Xmx1172M
-Xms600M
-XX:+UseParNewGC
-XX:NewSize=150M
My application run on SunOS 10 with Java 1.6.0_21 . Hardware is 2 x CPU quad core (uname -X result is numCPU = 8).
Questions are
Observing GC behaviours, New objects creating on eden space until eden is full. When eden space full GC runs, clear garbage, if object is not dead copy to Old-gen (I discard 'from' & 'to' spaces), Similarly Old-Gen is full, GC runs with CMS-concurrent phase and clear Old-gen space. Some part of CMS is Stop-the-world (pause time). This is a loop.
- Is above scenerio true?
- After GC clean old-gen space, there is no enough space expand old-gen space(XMS and XMS values are different) ?
- When full GC operation start? How to decided it?
- CMS-concurrent phase duration depends on Eden space size, actually my expectation is, Eden space does not effect CMS-concurrent phase duration. What is going on GC related with eden space on CMS-concurrent phase?
- What else suggest to me minimizing pause time? Indeed, Most valuable answer for me :)
Thanks