<p dir="ltr">I'd be more concerned with heap overhead of using AtomicXXX if it's embedded in lots of objects (or embedded in classes with high allocation rates).  For example, AtomicInteger will be 24 bytes for a payload of 4 bytes (nevermind requiring more GC time to mark and sweep these objects if they get tenured).  The memory indirection cost may be minimal depending on whether you hit cache or not.  Anyway, you can use Unsafe to replicate AtomicXXX to remove overhead.</p>

<p dir="ltr">The second use case sounds OK - you have single writer multiple readers.  Your only possible concern there is whether other fields on the same cache line are read independent of message time.  In other words, if message time changes more frequently than the other data on the line, you'll get unnecessary coherence hits for reading that other data.</p>

<p dir="ltr">Vitaly</p>
<p dir="ltr">Sent from my phone</p>
<div class="gmail_quote">On Feb 13, 2013 4:45 PM, "Ariel Weisberg" <<a href="mailto:ariel@weisberg.ws">ariel@weisberg.ws</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<u></u>




<div><div>Hi,<br></div>
<div> </div>
<div>I have two use cases in mind.<br></div>
<div> </div>
<div>I have some COW* data structures that use AtomicReference internally for example <a href="https://github.com/VoltDB/voltdb/blob/master/src/frontend/org/voltcore/utils/COWNavigableSet.java#L30" target="_blank">COWNavigableSet</a>. Using AtomicReference means there is an extra indirection for every lookup.<br>
</div>
<div> </div>
<div>The other use case is a field that tracks the <a href="https://github.com/VoltDB/voltdb/blob/cdc1eb42d6d8708cb5371af5cb1fd747372d8be0/src/frontend/org/voltcore/messaging/ForeignHost.java#L300" target="_blank">last time a message</a> was received from a host. There is a single thread that updates the field every time a message is delivered and multiple threads read the field <a href="https://github.com/VoltDB/voltdb/blob/cdc1eb42d6d8708cb5371af5cb1fd747372d8be0/src/frontend/org/voltcore/messaging/ForeignHost.java#L213" target="_blank">every time they send a message</a> to that host.<br>
</div>
<div> </div>
<div>In the last message time tracking use case there will always be a coherence operation for the cache line containing the value tracking the last message time. I suppose it doesn't really matter if the other fields in that class are on the same line because the number of coherence operations remains the same. If there were a get equivalent of lazySet that would be nice.<br>
</div>
<div> </div>
<div>Thanks,<br></div>
<div>Ariel</div>
<div> </div>
<div> </div>
<div>On Wed, Feb 13, 2013, at 03:51 PM, Vitaly Davidovich wrote:<br></div>
<blockquote type="cite"><p dir="ltr">Can you elaborate a bit? Do you mean using AtomicInteger (as an example) instead of an int field inside a class? If so, I'd personally pad out the class with filler fields to avoid false sharing - there's no guarantee that the indirection via AtomicXXX will put memory far apart; padding gives you a bit more control here.<br>
</p><p dir="ltr">Sent from my phone<br></p><div class="gmail_quote"><div>On Feb 13, 2013 3:44 PM, "Ariel Weisberg" <<a href="mailto:ariel@weisberg.ws" target="_blank">ariel@weisberg.ws</a>> wrote:<br></div>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br><br>
Does it make sense to use Atomic*FieldUpdater to remove the indirection<br>
overhead of an AtomicLong and AtomicReference? Similarly, does it make<br>
sense to use Atomic* to create indirection in order to avoid false<br>
sharing?<br><br>
Thanks,<br>
Ariel<br>
_______________________________________________<br>
Concurrency-interest mailing list<br><a href="mailto:Concurrency-interest@cs.oswego.edu" target="_blank">Concurrency-interest@cs.oswego.edu</a><br><a href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" target="_blank">http://cs.oswego.edu/mailman/listinfo/concurrency-interest</a></blockquote>
</div>
</blockquote></div>

</blockquote></div>