RFR/RFC: 8196071: Change G1 Full GC heap and thread sizing ergonomics
Stefan Johansson
stefan.johansson at oracle.com
Thu Mar 22 15:42:46 UTC 2018
Hi,
Please review or comment on this change to let the G1 Full GC calculate
the number of worker threads.
Links
JBS: https://bugs.openjdk.java.net/browse/JDK-8196071
Webrev: http://cr.openjdk.java.net/~sjohanss/8196071/00/
Summary
After making UseDynamicNumberOfGCThreads true by default, having a sane
thread sizing model for the G1 Full GC is important. Before this change
the Full GC would use the same number of threads as the previous
collection, and if being the first just use 1 thread. The proposed
change now have the Full GC consider two metrics to get a good number of
worker threads.
The first metric is to try to avoid to much wasted space. On average
each worker used by the parallel full GC will cause half a region of
unused memory. To make sure we don't use too many workers we use
G1HeapWastePercent to limit the number of workers.
The other metric is the one used in AdaptiveSizePolicy, it looks at the
flag HeapSizePerGCWorker and limit the number by this. In most cases
this is more restrictive than using G1HeapWastePercent, but for small
heaps setting a large G1HeapRegionSize, G1HeapWastePercent will come
into play.
This change also changes the default value of HeapSizePerGCWorker to 32M
instead of 64M, this can be reverted if anyone has a good argument to
leave it as is. My testing shows that for DaCapo, SpecJVM98 and GCBasher
(gc intensive stress test) with small heaps we get better pause times
with the flag set to 32M. There might be other arguments, such as not
using to much resources on small systems that might also be important so
please let me know if you have reasons why the flag should be left
unchanged.
Testing
Functional testing through Mach5 and manual performance testing with
small heaps and different values for HeapSizePerGCThread.
Thanks,
Stefan
More information about the hotspot-gc-dev
mailing list