RFR: 8187577: JVM crash during gc doing concurrent marking

coleen.phillimore at oracle.com coleen.phillimore at oracle.com
Tue Feb 6 23:23:58 UTC 2018


Hi Poonam,

Kim and I discussed this fix and we think it's correct for this case, 
but can you move ensure_klass_alive out of Klass and into a local static 
function in jvmtiGetLoadedClasses.cpp?   We don't want this to be the 
normal way to do things in jdk11 but there are similar local functions 
in jdk10 and 8 for your backports, so this would be like those ones.

Long term, Kim convinced me that Stefan is right and we have to use the 
AccessAPI to keep alive class loaders (or holders) when classes and 
other things are iterated through the ClassLoaderDataGraph. I'll make 
this change at some point soon when I do some other ClassLoaderDataGraph 
changes.

Thanks,
Coleen

On 2/2/18 4:22 PM, Poonam Parhar wrote:
>
> Adding Coleen to this RFR.
>
> On 2/2/2018 11:41 AM, Poonam Parhar wrote:
>> Hello,
>>
>> Please review this fix for a G1GC crash occurring during concurrent 
>> marking.
>>
>> Bug: JDK-8187577: <https://bugs.openjdk.java.net/browse/JDK-8187577> 
>> JVM crash during gc doing concurrent marking
>> Webrev: http://cr.openjdk.java.net/~poonam/8187577/webrev.00/
>>
>> Problem:
>> A klass that has been considered unreachable by G1, can be looked up 
>> in the CLD/SD, and its _java_mirror or _class_loader can be stored in 
>> a root or any other reachable object making it alive again. Whenever 
>> a klass is resurrected in this manner, the SATB part of G1 needs to 
>> be notified about this, otherwise the concurrent marking remark phase 
>> will wrongly unload that klass.
>>
>> In this particular crash, while a G1 is doing concurrent marking and 
>> has prepared its list of unreachable classes, JVMTI on a Java thread 
>> traverses classes in the CLD and stores thread-local JNIHandles for 
>> the java_mirror of the loaded classes. G1 does not have knowledge of 
>> these thread-local JNIHandles, and in the remark phase it unloads 
>> classes as per its prior knowledge of unreachable classes. But when 
>> these JNIHandles are later scanned, it leads to a crash.
>>
>> Solution:
>> Inform G1's SATB that a klass has been resurrected and it should not 
>> be unloaded.
>>
>> Testing:
>> - Customer verification testing
>> - mach5 jdk-tier1-3, hs-tier1-2
>>
>> Thanks,
>> Poonam
>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20180206/ef6a3be7/attachment.htm>


More information about the hotspot-gc-dev mailing list