RFR: 8314480: Memory ordering spec updates in java.lang.ref
Hans Boehm
duke at openjdk.org
Mon Nov 27 22:44:10 UTC 2023
On Mon, 13 Nov 2023 22:31:16 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."_
src/java.base/share/classes/java/lang/ref/Reference.java line 568:
> 566: *
> 567: * @apiNote
> 568: * Reference processing or finalization may occur whenever the virtual machine detects that no
How about "detects that all needed data from the object is available elsewhere, and no reference to that object will ever be stored ..." Otherwise this seems needlessly mysterious to me.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16644#discussion_r1406857727
More information about the core-libs-dev
mailing list