Bugfix on CMSClassUnloadingEnabled used with CMSClassUnloadingMaxInterval > 0
Mikael Gerdin
mikael.gerdin at oracle.com
Thu Sep 19 11:48:24 UTC 2013
Hi Jungwoo,
On 2013-09-17 01:14, Jungwoo Ha wrote:
> Hi,
>
> We found that hotspot crashes when CMSClassUnloadingEnabled is true, and
> CMSClassUnloadingMaxInterval > 0.
> This is on hotspot24 and u40.
> This is easily reproducible with DaCapo tradesoap benchmark with
> heapsize around 200MB.
>
> The reason for the crash is that CMS sets the root set when
> CMSClassUnloadingEnabled is on during the constructor phase assuming
> that every CMS cycle will unload the class.
> However, when CMSClassUnloadingMaxInterval > 0, CMS may not unload
> classes ended up crashing.
> I think this is apparently a bug, and I attach the fix.
> Please take a look at the attached patch.
> My changes are resetting the root scanning option on every CMS cycle in
> setup_cms_unloading_and_verification_state() if CMSCLassUnloadingEnabled
> is on.
>
> Please take a look and let us know how to proceed.
Jon filed a bug for this:
https://bugs.openjdk.java.net/browse/JDK-8024954
I think the code change fixes the bug but I'd like it better if you
changed the code to always set the requested ScanOption values in
setup_cms_unloading_and_verification_state
something like:
if (should_unload_classes()) {
set_root_scanning_option(SO_SystemClasses);
} else {
set_root_scanning_option(SO_AllClasses|SO_Strings|SO_CodeCache);
}
I also believe that your check for CMSClassUnloadingEnabled can cause a
bug similar to the one you are trying to fix if
ExplicitGCInvokesConcurrentAndUnloadsClasses would be enabled.
should_unload_classes() should be sufficient to determine which
ScanOptions to set for a particular cms cycle.
Please send a patch/webrev based on the latest jdk8 sources
http://hg.openjdk.java.net/hsx/hotspot-gc/hotspot
Since the function is also messing around with the verification flags,
make sure to run some tests on your changes with verification enabled.
/Mikael
>
> Thanks,
> Jungwoo
More information about the hotspot-gc-dev
mailing list