RFR: 8049831: Metadata Full GCs are not triggered when CMSClassUnloadingEnabled is turned off
stefan.karlsson at oracle.com
Thu Jul 10 08:22:54 UTC 2014
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