[16] RFR 8251910: Shenandoah: assert(external_guard || result != __null) failed: Invalid JNI handle

Zhengyu Gu zgu at redhat.com
Tue Aug 18 15:18:49 UTC 2020

Some of concurrent flags, e.g. concurrent_weak/strong_roots, are unset 
concurrently, they are harmless until mark bitmap is reset, concurrently.

In normal cycles, there are GC safepoints, e.g. init/final_updateref, 
between unset concurrent flags and reset mark bitmap, and those 
safepoints ensure the changes are made visible to all threads.

However, in rare cases, there are nothing to evacuate and no references 
need to be updated, so that, update reference GC safepoints are skipped.
Under this circumstance, Shenandoah will have to perform thread 
handshake to ensure the changes are visible before mark bitmap can be reset.

Bug: https://bugs.openjdk.java.net/browse/JDK-8251910
Webrev: http://cr.openjdk.java.net/~zgu/JDK-8251910/webrev.00/




More information about the hotspot-gc-dev mailing list