Java @Contended与类层次结构

3

我有一个类层次结构,每个级别都包含一些冷字段,子类定义自己的冷字段和热字段:

@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.subCold1Base.cold1Base.cold2一起打包?
  • 如果超类和子类都使用相同的名称定义争用组,它们会被打包到同一组中吗?

1
文档不是很清楚,但我发现了这个bug,我相信这表明cold1和cold2将被分组,但subcold1将被填充。 - assylias
1个回答

4

@Contended不是一个通用的字段布局机制; “我怎么才能确保……” 的答案是“你不能”。@Contended是VM的提示,告诉它您期望频繁地并发访问此字段,并且VM可能会尝试以减少虚假缓存线共享的发生来布置这些内容。或者它可能什么也不做;这是提示的本质。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接