RFR 8165246: [REDO] InstanceKlass::_previous_version_count goes negative

Coleen Phillimore coleen.phillimore at oracle.com
Tue Sep 6 16:24:56 UTC 2016


Summary: make _has_previous_version a boolean that is set to true when 
previous version of a class is added or during class unloading call to 
purge_previous_versions

The failed fix was because InstanceKlass's previous_versions klasses 
were walked more than once during class unloading, because the scratch 
classes are also on the CLD::_klasses list.  This change does three 
things.  1. Only walk the class if has_been_redefined (which is not set 
for the scratch class), 2. set next link to NULL for the scratch class 
when removed from the previous version list, and 3. change the counter 
to a flag because the counter may never go to zero if a CLD has 
redefined classes with previous versions and is unloaded.  For this 
latter case we don't need to walk previous_versions.

I tested this with changes 1 and 2 in Kitchensink, to verify the 
diagnosis, and then added 3 and retested.
Also tested with the fix for 
https://bugs.openjdk.java.net/browse/JDK-8156137 which was checked into 
hs_-omp repository.

Also ran through RBT 4 tiers nightly tests.

open webrev at http://cr.openjdk.java.net/~coleenp/8165246.01/webrev
bug link https://bugs.openjdk.java.net/browse/JDK-8165246

Thanks,
Coleen




More information about the hotspot-runtime-dev mailing list