<p dir="ltr">JIT knows about Unsafe operations, and it also knows the type of memory being accessed (or sometimes knows it doesn't know :)).  So I don't think it'll mark a DBB as unreachable while these operations are in-flight.</p>
<p dir="ltr">Peter's scenario is unique to WeakReference since it's intentionally not considered a strong reference and there's otherwise plain java code in his example (that JIT can reason about easily otherwise).</p>
<p dir="ltr">sent from my phone</p>
<div class="gmail_quote">On Dec 7, 2015 8:10 AM, "Alexandre De Champeaux" <<a href="mailto:adc@quartetfs.com">adc@quartetfs.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span style="color:rgb(0,0,0);font-size:12.8px">Hi all,</span><div style="color:rgb(0,0,0);font-size:12.8px"><br></div><div style="color:rgb(0,0,0);font-size:12.8px">I recently had a look at the discussion started by Peter Levart on October 21 (<a href="http://cs.oswego.edu/pipermail/concurrency-interest/2015-October/014493.html" target="_blank">http://cs.oswego.edu/pipermail/concurrency-interest/2015-October/014493.html</a>).</div><div style="color:rgb(0,0,0);font-size:12.8px"><br></div><div style="color:rgb(0,0,0);font-size:12.8px">It was a very insightful discussion, and made me aware that the "this" object could be garbage collected while being inside a call of one of its method.</div><div style="color:rgb(0,0,0);font-size:12.8px"><br></div><div style="color:rgb(0,0,0);font-size:12.8px">However, this got me concerned about the java.nio.DirectByteBuffer read and write methods:</div><div style="color:rgb(0,0,0);font-size:12.8px"><span style="font-size:12.8px">If the "this" object is garbage collected when making a call like ByteBuffer.allocateDirect(int)</span><span style="font-size:12.8px">.someGetOrPutMethod(), the native pointer that is passed to sun.misc.Unsafe might be freed, and accessing it will cause the read/write to occur in an invalid memory area, which might lead to a segfault, or other major issues.</span></div><div style="color:rgb(0,0,0);font-size:12.8px"><span style="font-size:12.8px">This would be quite unlikely: JIT compilation needs to occur while keeping a safepoint, then a GC must happen, and finally the ReferenceHandler thread needs to perform its cleanup fast enough.</span><br></div><div style="color:rgb(0,0,0);font-size:12.8px"><br></div><div style="color:rgb(0,0,0);font-size:12.8px">I am particularly concerned by the get(byte[] dst, int offset, int length) method, that in turns calls Bits.copyToArray, which purposely splits its calls to Unsafe.copyMemory to allow for safepoints to sneak in.</div><div style="color:rgb(0,0,0);font-size:12.8px"><br></div><div style="color:rgb(0,0,0);font-size:12.8px">Am I correct, or does the JVM performs specific protection for instances of DirectByteBuffer?</div><div style="color:rgb(0,0,0);font-size:12.8px"><br></div><div style="color:rgb(0,0,0);font-size:12.8px">Regards,<span style="font-size:small;color:rgb(34,34,34)">  </span></div><div style="color:rgb(0,0,0);font-size:12.8px"><span style="font-size:small;color:rgb(34,34,34)"><br></span></div><div style="color:rgb(0,0,0);font-size:12.8px"><span style="font-size:small;color:rgb(34,34,34)">Alexandre de Champeaux</span></div>
</div>
<br>_______________________________________________<br>
Concurrency-interest mailing list<br>
<a href="mailto:Concurrency-interest@cs.oswego.edu">Concurrency-interest@cs.oswego.edu</a><br>
<a href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" rel="noreferrer" target="_blank">http://cs.oswego.edu/mailman/listinfo/concurrency-interest</a><br>
<br></blockquote></div>