Summary

Remove three rarely-used combinations of garbage collectors in order to
reduce ongoing development, maintenance, and testing costs.

Goals

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.

Motivation

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.

Description

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:

Flags

GC Configuration

-XX:-UseParNewGC -XX:+UseConcMarkSweepGC

DefNew + CMS

-XX:+UseParNewGC

ParNew + SerialOld

-Xincgc

ParNew + iCMS

-XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC

ParNew + iCMS

-XX:+CMSIncrementalMode -XX:+UseConcMarkSweepGC -XX:-UseParNewGC

DefNew + iCMS

Alternatives

Continue to support untested GC combinations.

Testing

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.

Impact

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.