[jmm-dev] VarHandle.safepoint() methods

Doug Lea dl at cs.oswego.edu
Fri Jan 6 00:28:26 UTC 2017


On 01/05/2017 11:37 AM, Andrew Haley wrote:
> On 05/01/17 16:34, Doug Lea wrote:
>>> I'm not proposing any change to the MappedByteBuffer API.  What
>>> would insert the call to safePointEpoch() ?
>>
>> Some sort of annotation? I realize that this trades off one kind of
>> messiness for another, but users would otherwise need to know to
>> use your proposed getSafePoint() method vs plain get(). I can't
>> think of anything that automatically does either of these or
>> any of Gil's variants.
>
> But users of an unmappable MappedByteBuffer will use exactly the
> same API as any other kind of ByteBuffer.  They won't know anything
> about safepoints. That's the whole idea.  Any solution which changes
> the ByteBuffer API isn't going to fly.
>

I'm not sure which APIs you mean not to touch.
It seems possible to use it in your original example.
Something like:

public class CloseableMappedByteBuffer {

     // Actually unmaps a byte buffer.
     private native void unmap(MappedByteBuffer b);

      private volatile MappedByteBuffer _buf;
+    private static final VarHandle BUF = ...
+    private long epoch = 0; // no need to init?

     private VarHandle vh;

     private MappedByteBuffer buf() {
+ 	epoch = VarHandle.safePointCheck(epoch);
+ 	return _BUF.get(this);
-        return (MappedByteBuffer) v.getSafepoint();
     }

   //...




More information about the jmm-dev mailing list