RFR: 8256106: Bypass intrinsic/barrier when calling Reference.get() from Finalizer

Roman Kennke rkennke at openjdk.java.net
Tue Nov 10 09:43:02 UTC 2020


Finalizer calls Reference.get() from the Finalizer to acquire the finalizee. Concurrent reference processing GCs like Shenandoah and ZGC would return NULL for unreachable referents, and thus would not call finalize() on them.

ZGC works around this by fixing the referent before enqueuing, so that the barrier would take the fast-path, but Shenandoah cannot do this.

It is ok to bypass the barrier altogether in this place, because the FinalReference is inactive and marking and reference-discovery treat inactive FinalReferences like strong references.

Testing:
 - [x] hotspot_gc_shenandoah
 - [x] tier1 +UseShenandoahGC +ShenandoahVerify
 - [x] tier2 +UseShenandoahGC +ShenandoahVerify
 - [ ] tier1
 - [ ] tier2

-------------

Commit messages:
 - 8256106: Bypass intrinsic/barrier when calling Reference.get() from Finalizer

Changes: https://git.openjdk.java.net/jdk/pull/1140/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=1140&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8256106
  Stats: 8 lines in 2 files changed: 7 ins; 0 del; 1 mod
  Patch: https://git.openjdk.java.net/jdk/pull/1140.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/1140/head:pull/1140

PR: https://git.openjdk.java.net/jdk/pull/1140


More information about the core-libs-dev mailing list