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

Reply via email to