Integrated: 8269897: Shenandoah: Resolve UNKNOWN access strength, where possible
Roman Kennke
rkennke at openjdk.java.net
Tue Jul 13 13:33:59 UTC 2021
On Tue, 6 Jul 2021 19:00:59 GMT, Roman Kennke <rkennke at openjdk.org> wrote:
> We've observed test failures in jcstress, see:
> https://bugs.openjdk.java.net/browse/JDK-8269897
>
> 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.
>
> Testing:
> - [x] the provided jcstress test
> - [x] hotspot_gc_shenandoah
> - [x] tier1
This pull request has now been integrated.
Changeset: 7ac08161
Author: Roman Kennke <rkennke at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/7ac08161a8b2080ed054bc00a30d6f694ece4df3
Stats: 116 lines in 3 files changed: 49 ins; 33 del; 34 mod
8269897: Shenandoah: Resolve UNKNOWN access strength, where possible
Reviewed-by: shade
-------------
PR: https://git.openjdk.java.net/jdk/pull/4697
More information about the shenandoah-dev
mailing list