[jdk17] RFR: 8269897: Shenandoah: Treat UNKNOWN refs access as strong [v3]
rkennke at openjdk.java.net
Thu Jul 8 12:41:26 UTC 2021
> We've observed test failures in jcstress, see:
> We used to treat UNKNOWN reference accesses like weak accesses. UNKNOWN is used for Unsafe, reflection and JNI accesses, where it cannot be determined at compilation-time if we are accessing a regular field or a Reflection.referent field. The rationale for treating UNKNOWN as weak was that if the reference is a regular reference, then the value would be strongly reachable anyway, and only if it is a referent field would reachability matter. However, it turns out that this assumption is wrong: the test shows that a reference that is only weakly reachable can be legitimately written into a field, thus resurrecting the reference, and when that weakly reachable reference is loaded, it would be (wrongly) filtered as NULL.
> A fix is to treat UNKNOWN accesses as strong. Accessing Reference.referent via reflection, JNI or Unsafe is Bad Idea anyway.
> This test shows the problem with CAS, but I believe it affects all accesses via reflection, JNI, etc.
> - [x] the provided jcstress test
> - [x] hotspot_gc_shenandoah
> - [x] tier1
Roman Kennke has updated the pull request incrementally with one additional commit since the last revision:
Properly resolve access strength in load, cmpxchg and xchg
- all: https://git.openjdk.java.net/jdk17/pull/219/files
- new: https://git.openjdk.java.net/jdk17/pull/219/files/31805dee..7647b234
- full: https://webrevs.openjdk.java.net/?repo=jdk17&pr=219&range=02
- incr: https://webrevs.openjdk.java.net/?repo=jdk17&pr=219&range=01-02
Stats: 78 lines in 2 files changed: 68 ins; 4 del; 6 mod
Fetch: git fetch https://git.openjdk.java.net/jdk17 pull/219/head:pull/219
More information about the hotspot-gc-dev