Reference.reachabilityFence
Paul Sandoz
paul.sandoz at oracle.com
Tue Nov 24 18:16:34 UTC 2015
> On 24 Nov 2015, at 18:08, mark.reinhold at oracle.com wrote:
>
> 2015/11/24 1:32 -0800, paul.sandoz at oracle.com:
>>> On 24 Nov 2015, at 01:31, mark.reinhold at oracle.com wrote:
>>> This seems eminently reasonable, but why does it belong in the
>>> java.lang.ref.Reference class? It has nothing (directly) to do
>>> with reference objects.
>>>
>>> java.lang.Runtime, perhaps?
>>
>> Out of all the places i thought Reference was the least indirect. The
>> method documentation refers to the notion of "strongly reachable” in
>> the j.l.ref package doc (I should update to link directly to that). In
>> effect it’s an operation on potential referents that relates to
>> reachability, garbage collection and finalization.
>>
>> A further weaker argument is Reference is not commonly used thus there
>> may be less chance of this method being misused.
>>
>> I do prefer the current location, but i don’t strongly object to
>> moving it to Runtime.
>
> Having read through more of the background, I now agree that the
> Reference class is a suitable home for this method. Most anyone who
> needs this method will already be thinking about finalization and/or
> reference objects.
>
> I do think "keepAlive" is a better name, especially since there are
> (at present) no other "*Fence" methods in sight.
>
The current name was considered less open to misinterpretation (see Doug’s latest email).
> A few more questions/suggestions:
>
> - This method started out (way back in 2009, on concurrency-interest)
> as part of a more general java.util.concurrent.Fences class [1].
And it goes back even earlier (hat tip to Peter Kessler) under the “keepAlive” name:
http://www.cs.umd.edu/~pugh/java/memoryModel/archive/1256.html <http://www.cs.umd.edu/~pugh/java/memoryModel/archive/1256.html>
> Do we have any expectation that Fences will ever be proposed for
> inclusion in the platform, or is it something that's otherwise
> abandoned?
>
They are subsumed under the VarHandle JEP and for now are tacked on to the VarHandle class:
http://hg.openjdk.java.net/jdk9/sandbox/jdk/file/b36071eb5637/src/java.base/share/classes/java/lang/invoke/VarHandle.java#l163 <http://hg.openjdk.java.net/jdk9/sandbox/jdk/file/b36071eb5637/src/java.base/share/classes/java/lang/invoke/VarHandle.java#l163>
http://hg.openjdk.java.net/jdk9/sandbox/jdk/file/b36071eb5637/src/java.base/share/classes/java/lang/invoke/VarHandle.java#l1436 <http://hg.openjdk.java.net/jdk9/sandbox/jdk/file/b36071eb5637/src/java.base/share/classes/java/lang/invoke/VarHandle.java#l1436>
It was felt that these memory ordering fences are so very different from the reachability fence they be kept separate.
> - The specification, while short, needs some work. As far as I can
> tell the scope of the guarantee made by this method does not extend
> beyond that of the method that invokes it
Yes, and more specifically beyond the actual invocation from within the method that invokes it.
> , yet the specification
> says "regardless of any prior actions of the program", which is
> almost certainly too broad.
>
Hmm… perhaps we can say something like “regardless of any prior actions of the calling method”? I am not sure that is entirely accurate if say the calling method gets inlined (and say the reference is passed down from another method).
> - Is it worth including one or both of the examples from the original
> Fences draft?
>
I think so.
Paul.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20151124/acf78622/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 841 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20151124/acf78622/signature.asc>
More information about the hotspot-compiler-dev
mailing list