RFR: 8314480: Memory ordering spec updates in java.lang.ref
Brent Christian
bchristi at openjdk.org
Wed Nov 15 23:20:31 UTC 2023
On Tue, 14 Nov 2023 14:06:29 GMT, Alan Bateman <alanb at openjdk.org> wrote:
>> Classes in the `java.lang.ref` package would benefit from an update to bring the spec in line with how the VM already behaves. The changes would focus on _happens-before_ edges at some key points during reference processing.
>>
>> A couple key things we want to be able to say are:
>> - `Reference.reachabilityFence(x)` _happens-before_ reference processing occurs for 'x'.
>> - `Cleaner.register()` _happens-before_ the Cleaner thread runs the registered cleaning action.
>>
>> This will bring Cleaner in line (or close) with the memory visibility guarantees made for finalizers in [JLS 17.4.5](https://docs.oracle.com/javase/specs/jls/se18/html/jls-17.html#jls-17.4.5):
>> _"There is a happens-before edge from the end of a constructor of an object to the start of a finalizer (§12.6) for that object."_
>
> src/java.base/share/classes/java/lang/ref/Reference.java line 393:
>
>> 391: * Clears this reference object. Invoking this method does not enqueue this
>> 392: * object, and the garbage collector will no longer enqueue this object once
>> 393: * the referent reaches the designated reachability level.
>
> I'm wondering if "designated reachability level" is the right words to use here. The Notification section in the package description speaks of when the reachability of the referent has changed to the value corresponding to the type of the reference and I wonder if it might be better to use wording consistent with that. Minimally it could link to the package description where the notion of reachability level is introduced.
Perhaps it's sufficient to say simply that, _"the garbage collector will no longer enqueue this object."_
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16644#discussion_r1394969775
More information about the core-libs-dev
mailing list