Java @Contended 与 class 层次结构
Java @Contended with class hierarchy
我有一个 class 层次结构,其中每个级别都包含一些冷字段,并且子class 定义了它们自己的冷字段和热字段:
@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
打包在一起?
- 如果 superclass 和 subclass 都定义了同名的争用组,它们是否被打包到同一个组中?
@Contended
不是通用的字段布局机制; "how can I make sure..." 的答案是 "you can't." @Contended
是对 VM 的提示,表明您希望频繁并发访问该字段,并且 VM 可能会尝试以如下方式进行布局以减少错误缓存行共享的发生率。或者它可能什么都不做;这是提示的本质。
我有一个 class 层次结构,其中每个级别都包含一些冷字段,并且子class 定义了它们自己的冷字段和热字段:
@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
打包在一起? - 如果 superclass 和 subclass 都定义了同名的争用组,它们是否被打包到同一个组中?
@Contended
不是通用的字段布局机制; "how can I make sure..." 的答案是 "you can't." @Contended
是对 VM 的提示,表明您希望频繁并发访问该字段,并且 VM 可能会尝试以如下方式进行布局以减少错误缓存行共享的发生率。或者它可能什么都不做;这是提示的本质。