首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >2 AtomicReferences可以假分享吗?

2 AtomicReferences可以假分享吗?
EN

Stack Overflow用户
提问于 2017-07-27 09:49:35
回答 1查看 98关注 0票数 2

当我有

代码语言:javascript
运行
复制
Object a;
Object b;

我有错误的分享

这样我就不会

代码语言:javascript
运行
复制
@Contended
Object a;
Object b;

但如果我有

代码语言:javascript
运行
复制
final AtomicReference<Object> a;
final AtomicReference<Object> b;

我还有错误的分享吗?

我的猜测是,我不需要@Contended,因为虽然a,b可能在同一条新闻中,但他们所指的并不是……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-27 11:44:28

AtomicReference实例通常需要16个字节(在HotSpot JVM上):12个字节对象头+4个字节值字段。如果两个AtomicReferences在Java堆中相邻,它们可能仍然共享相同的缓存行,通常为64个字节。

注意:即使在两个AtomicReferences之间分配一些对象,垃圾收集也可能压缩堆,以便AtomicReferences再次位于彼此之间。

有几种避免错误共享的方法:

  1. 扩展AtomicReference类并添加至少6个long字段--这将使引用占用64个字节或更多字节。 _~__^x
  2. 使用AtomicReferenceArray并将引用放置在至少16个单元格的距离上,例如,一个引用将位于索引16,另一个将位于索引32。 .^^-64个字节
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45347166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档