RFR (L): 8064702: Remove the CMS foreground collector

Bengt Rutisson bengt.rutisson at oracle.com
Wed Nov 12 13:03:07 UTC 2014

Hi everyone,

Can I have a couple of reviews for this change to remove the foreground 
collector in CMS?



This work is part of JEP 214 (http://openjdk.java.net/jeps/214). There 
are quite a few lines changed. Mostly it is just removal of code and it 
should hopefully be fairly straight forward to review.

A couple of things are worth noting:

The name "foreground collection" is used for two different things in 
CMS. Both the full GC that does a serial mark and compact of the whole 
heap (the fall back to SerialGC) and the foreground mode of completing a 
CMS cycle in a stop-the-world phase. We still need the fall back to the 
SerialGC for when we get a concurrent mode failure, so this change is 
just to remove the later feature. That is to remove the ability to 
interrupt a concurrent CMS cycle and finish it up in a stopped manner.

This means that there is still code and comments using the word 
"foreground" even after the changes I propose. In particular the 
protocol to synchronize between the CMS collector and the MarkSweep 
serial full GC is left intact and uses locks and flags with foreground 

The intent of the change is to remove all traces of the actual 
foreground mode of the CMS cycle while changing as little as possible of 
the SerialGC interaction.

Since there were these two modes of the foreground collector before many 
methods needed to know in which mode they were operating. This state was 
communicated by passing around parameters that were often called asynch 
and clear_all_soft_refs. Now that there is only one mode (the SerialGC 
one) I've tried to remove these parameters as much as possible. The 
interpretation being that asynch means the SerialGC (so always true now) 
and that we should always clear all soft refs when we do a full GC and 
never clear all soft refs when we do a concurrent CMS cycle.


More information about the hotspot-gc-dev mailing list