When looking at garbage collections in flight recordings in Java Mission Control, the reason for why a garbage collection occurred can be seen. When running with parallel GC, a common reason for ParallelOld collections will be "Ergonomics". When users search for "Ergonomics", various things can be found, including:
iker.alonso@oracle.com: I found this bug: Bug 12934899 : STRESS: LOW PERFORMANCE WITH SUN JDK 7
"The heap settings didn't take effect due to ergonomics being ON with Parallel collector. For every heap expansion/shrinking, it needs to Full GC which is impacting the performance.
To switch the ergonomics OFF, we need to use -XX:-UseAdaptiveSizePolicy ."
In this case the reason Ergonomics really mean "Not enough old space to handle next yc given the historical promotion rate", which does not necessarily indicate a Full GC triggered by the resizing of the heap.
It would be great if we could be more specific about why we garbage collect, so that the information can be actionable without reading the HotSpot source code. After discussions with Jesper, a better name would probably be "Out of Old Space" possible with the addtion " for next YC".
iker.alonso@oracle.com: I found this bug: Bug 12934899 : STRESS: LOW PERFORMANCE WITH SUN JDK 7
"The heap settings didn't take effect due to ergonomics being ON with Parallel collector. For every heap expansion/shrinking, it needs to Full GC which is impacting the performance.
To switch the ergonomics OFF, we need to use -XX:-UseAdaptiveSizePolicy ."
In this case the reason Ergonomics really mean "Not enough old space to handle next yc given the historical promotion rate", which does not necessarily indicate a Full GC triggered by the resizing of the heap.
It would be great if we could be more specific about why we garbage collect, so that the information can be actionable without reading the HotSpot source code. After discussions with Jesper, a better name would probably be "Out of Old Space" possible with the addtion " for next YC".