[14] 8237632: Shenandoah fails some vmTestbase_nsk_jvmti tests with "Forwardee must point to a heap address"

Zhengyu Gu zgu at redhat.com
Mon Feb 3 20:59:28 UTC 2020


Shenandoah uses oop mark word's "marked" pattern to indicate forwarding.
Unfortunately, JVMTI heap walk (VM_HeapWalkOperation) also uses this 
pattern to indicate visited.

The conflicts present serious problems during Shenandoah's concurrent 
evacuation and concurrent reference update phases, as it blindly treats 
"marked" pattern as "forwarding".


There are invariants we can use to distinguish "forwarding" and 
"visited" pattern.

1. Marked pattern in collection set indicates forwarding
2. Marked pattern off collection set indicates visited by ObjectMarker 	
    (because oops seen by ObjectMarker were LRB'd)
3. No off collection set marked pattern at any shenandoah safepoint. In
    fact, no off collection set marked pattern at any safepoints except
    VM_HeapWalkOperation safepoints.
    This is an important invariant, since traversal degenerated GC drops
    collection set before entering degenerated GC cycle.

Note: We only downgrade some debug assertions, but preserve full 
capacities of verifier, because verifier always runs at safepoints.

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

Test:
   hotspot_gc_shenandoah
   vmTestbase_nsk_jvmti
   vmTestbase_nsk_jdi

Thanks,

-Zhengyu




More information about the hotspot-gc-dev mailing list