RFR: 8049831: Metadata Full GCs are not triggered when CMSClassUnloadingEnabled is turned off

Stefan Karlsson stefan.karlsson at oracle.com
Thu Jul 10 08:22:54 UTC 2014

Hi all,

Please, review this fix to honor -XX:-CMSClassUnloadingEnabled correctly 
in the metadata allocation failure path.


By default, CMS does class unloading after a concurrent marking cycle. 
When the amount of metadata hits the high water mark 
(capacity_until_GC), a concurrent cycle is initiated, the high water 
mark is increased and the thread can proceed with the allocation. If 
CMSClassUnloadingEnabled is turned off we don't unload classes after a 
concurrent cycle, but instead relies on Full GCs to reclaim metadata 
memory. The current code skips triggering a concurrent cycle if 
CMSClassUnloadingEnabled is turned off, but it still allows the high 
water mark to be increased and the thread can proceed with the 
allocation without triggering a Full GC first. This defeats the entire 
purpose of the high water mark.

The suggested fix is to not allow the increase of the high water mark 
and the allocation if CMSClassUnloadingEnabled is turned off.


More information about the hotspot-gc-dev mailing list