Summary
-------
Make G1 the default garbage collector on 32- and 64-bit server
configurations.
Motivation
----------
Limiting GC pause times is, in general, more important than maximizing
throughput. Switching to a low-pause collector such as G1 should provide
a better overall experience, for most users, than a throughput-oriented
collector such as the Parallel GC, which is currently the default.
Many performance improvements were made to G1 in JDK 8 and its update
releases, and further improvements are planned for JDK 9. The
introduction of concurrent class unloading ([JEP 156][1]) in JDK 8u40
made G1 a fully-featured garbage collector, ready to be the default.
Description
-----------
Changing the default collector is straightforward.
Risks and Assumptions
---------------------
- The change is based on the assumption that limiting latency is often
more important than maximizing throughput. If this assumption is
incorrect then this change might need to be reconsidered.
- G1 is seen as a robust and well-tested collector. It is not expected
to have stability problems, but becoming the default collector will
increase its visibility and may reveal previously-unknown issues. If
a critical issue is found that can't be addressed in the JDK 9 time
frame, we will revert back to use Parallel GC as the default for the
JDK 9 GA.
- The resource usage of G1 is different from Parallel. When resource
usage overhead needs to be minimized a collector other than G1 should
be used, and after this change the alternate collector will have to
be specified explicitly.
[1]: http://openjdk.java.net/jeps/156