RFR: 8314480: Memory ordering spec updates in java.lang.ref [v7]

Hans Boehm duke at openjdk.org
Tue Jan 30 21:41:49 UTC 2024


On Thu, 25 Jan 2024 23:09:51 GMT, Brent Christian <bchristi 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."_
>
> Brent Christian has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Updates to clear() and enqueue()

src/java.base/share/classes/java/lang/ref/package-info.java line 104:

> 102:  * <ul>
> 103:  *
> 104:  * <li> Actions in a thread prior to calling

Is line 104 needed? Can we just say that Refrence.reachaboilityFence(x) happens-before ...

src/java.base/share/classes/java/lang/ref/package-info.java line 109:

> 107:  *
> 108:  * <li>The clearing of a reference by the garbage collector <i>happens-before</i>
> 109:  * the garbage collector enqueues the reference.</li>

Is it worth specifying this middle step? Is there a way to tell that something has been enqueued without removing the reference or calling the deprecated (and very dubious) isEnqueued method? Could we just remove this paragraph, and instead start the next one with "The clearing of a reference by the garbage collector ..."

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

PR Review Comment: https://git.openjdk.org/jdk/pull/16644#discussion_r1406790434
PR Review Comment: https://git.openjdk.org/jdk/pull/16644#discussion_r1406865525


More information about the core-libs-dev mailing list