On Wed, 11 Nov 2020 17:48:12 GMT, Roman Kennke <[email protected]> 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