RFR 8251910: Shenandoah: assert(external_guard || result != __null) failed: Invalid JNI handle
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.
More information about the hotspot-gc-dev