Request for Review 8024483 - assertion failure: (!mirror_alive || loader_alive) failed AND 8024954: CMS: CMSClassUnloadingMaxInterval is not implemented correctly

Bengt Rutisson bengt.rutisson at
Mon Nov 4 09:02:47 UTC 2013

Hi Jon,

On 2013-11-02 01:02, Jon Masamitsu wrote:
> 8024483 - assertion failure: (!mirror_alive || loader_alive) failed
> The default value of _should_unload_classes in CMSCollector is false.
> The default value of CMSClassUnloadingEnabled is true (changed in jdk8)
> and is used to set the root scanning options.  This inconsistency leads to
> dead class loaders without unloading classes.
> The fix for 8024954 fixes (or works around) this inconsistency by 
> resetting
> the root scanning options based on _should_unload_classes.
> Additionally there is a missing call to update_should_unload_classes() in
> the CMS foreground collector.  Adding the call allows the test for
> CMSClassUnloadingEnabled  to pass but may not be a complete fix.

Looks good.

> 8024954: CMS: CMSClassUnloadingMaxInterval is not implemented correctly
> For 8024954 the classes used as roots was being set at initialization 
> based on
> the value of CMSClassUnloadingEnabled. For a value of 
> CMSClassUnloadingMaxInterval
> greater than 1, the roots need to be set dynamically
> (done in CMSCollector::setup_cms_unloading_and_verification_state with 
> this fix).

Looks good. One minor question. In CMSCollector::CMSCollector() you left 
this line:

  792   add_root_scanning_option(SharedHeap::SO_SystemClasses);

But in CMSCollector::setup_cms_unloading_and_verification_state() we now 
always set up the state correctly to be either SO_AllClasses or 
SO_SystemClasses. So, do we need that initilization in 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the hotspot-gc-dev mailing list