RFR: 8187577: JVM crash during gc doing concurrent marking
Poonam Parhar
poonam.bajaj at oracle.com
Fri Feb 2 19:41:06 UTC 2018
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/20180202/717261b6/attachment.htm>
More information about the hotspot-gc-dev
mailing list