On Thu, 25 Jan 2024 23:09:51 GMT, Brent Christian <bchri...@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