我有一个类层次结构,其中每个级别都包含一些冷字段,子类定义了自己的冷字段和热字段:
@Contended
public class Base {
final int cold1;
final int cold2;
}
public class Sub extends Base {
final int subCold1;
@Contended("hot1")
volatile int hot1;
@Contended("hot2")
volatile int hot2;
}
我的问题是:
- 如何确保
Sub.subCold1
与Base.cold1
和Base.cold2
打包在一起? - 如果父类(super class)和子类都定义了同名的争用组,它们会被打包到同一个组中吗?
最佳答案
@Contended
不是通用的字段布局机制; “我怎样才能确定……”的答案是“你不能”。 @Contended
是对 VM 的提示,表明您希望频繁并发访问该字段,并且 VM 可能会尝试以减少错误缓存行共享发生率的方式进行布局.或者它可能什么都不做;这是提示的本质。
关于Java @Contended 与类层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28795952/