On Wed, 11 Nov 2020 17:48:12 GMT, Roman Kennke <rken...@openjdk.org> wrote:
>> 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 >> - [x] tier1 >> - [x] tier2 > > Roman Kennke has updated the pull request incrementally with one additional > commit since the last revision: > > Rename inactive-getter and improve javadocs src/java.base/share/classes/java/lang/ref/Reference.java line 356: > 354: */ > 355: T getInactive() { > 356: return this.referent; It would be good to add `assert this instanceof FinalReference` to make this assertion clear. ------------- PR: https://git.openjdk.java.net/jdk/pull/1140