RFR (M): 8060697: Improve G1 Heap Growth Heuristics
tom.benson at oracle.com
Tue Nov 24 03:02:21 UTC 2015
Here is a proposed change to the G1 heap growth code for review. I've
added a detailed description to the CR, but here is the short version:
After a GC pause, the average ratio of time spent in recent GC pauses vs
overall time is computed. If it exceeds GCTimeRatio, the heap is
expanded by a fixed amount. With the new code, some deficiencies in the
ratio tracking are addressed, and the expansion size is scaled according
to how much the desired ratio is, on average, exceeded by. The target
ratio itself is also scaled at the lowest heap sizes.
The case that triggered this was actually JDK-8132077, where the JVM'08
Compress benchmark saw a 40% degradation. It was due to the heap being
about half the size in some runs, because of the way heap growth worked.
I'm still collecting the final performance data for this version, and
will attach it to the CR. Earlier experimental versions showed good
improvements in consistency of heap sizes. A couple of benchmarks
average a percentage point or two lower, while others improve by that
much or more. No growth percentage or scaling is going to be ideal for
every test, but the goal was to maintain performance without growing too
large. In fact, some tests now use much smaller heaps.
jprt, GC tests, benchmarks (specjvm'08, jbb'05, jbb'13, nosql)
More information about the hotspot-gc-dev