Remove three rarely-used combinations of garbage collectors in order to reduce ongoing development, maintenance, and testing costs.
There are three GC combinations that are currently not used enough to warrant future support:
- DefNew + CMS
- ParNew + SerialOld
- Incremental CMS
These combinations add extra complexity to the GC code base and consume valuable testing resources while adding very little value to the users. To simplify the GC code base and improve testing and sustainability we propose to remove these combinations.
There is a large cost to keep all the existing GC combinations. There are not enough resources to test all of them. New features take longer to implement and test due to the complexity of the GC code base. As a first step towards a simpler, more stable, and faster code base we need to remove some of the rarely used combinations.
The DefNew + CMS and ParNew + SerialOld combinations and the Incremental Mode of CMS will be deprecated (logging a warning message). This is to be interpreted as that these GC combinations will be removed in some upcoming major release.
The following combinations of command-line flags will be affected:
Continue to support untested GC combinations.
Tests to verify that the corresponding command line flags produce warnings and error messages as appropriate.
Make sure that all remaining GC combinations are subject to continuous testing.
Risks and Assumptions
There are basically three assumptions about the GC combinations in question:
Most users that are currently using Incremental CMS will benefit from switching over to "normal" CMS.
Users using DefNew + CMS will benefit from using ParNew + CMS instead.
Users using ParNew + SerialOld will benefit from using ParallelScavenge + SerialOld instead
There is a risk that one or more of these assumptions don't hold up. As far as we can tell at the moment the risk is small.
Compatibility: We will be deprecating command-line options.
User experience: Some users may have to change their currently selected GC. Hopefully this will be a change for the better.
Documentation: Since command-line options are changed the corresponding documentation needs to be updated. We also need to add release notes.