当我有
Object a;
Object b;
我有错误的分享
这样我就不会
@Contended
Object a;
Object b;
但如果我有
final AtomicReference<Object> a;
final AtomicReference<Object> b;
我还有错误的分享吗?
我的猜测是,我不需要@Contended
,因为虽然a,b
可能在同一条新闻中,但他们所指的并不是……
发布于 2017-07-27 11:44:28
AtomicReference
实例通常需要16个字节(在HotSpot JVM上):12个字节对象头+4个字节值字段。如果两个AtomicReferences在Java堆中相邻,它们可能仍然共享相同的缓存行,通常为64个字节。
注意:即使在两个AtomicReferences之间分配一些对象,垃圾收集也可能压缩堆,以便AtomicReferences再次位于彼此之间。
有几种避免错误共享的方法:
AtomicReference
类并添加至少6个long
字段--这将使引用占用64个字节或更多字节。
_~__^xAtomicReferenceArray
并将引用放置在至少16个单元格的距离上,例如,一个引用将位于索引16,另一个将位于索引32。
.^^-64个字节https://stackoverflow.com/questions/45347166
复制相似问题