缓存行最常见的是64字节。
需要独占的属性的左填充7个字节,右填充7个字节。
由于JAVA7中会优化掉无用字段。
所以要采用继承的方式绕过优化。
class LhsPadding{
protected long p1,p2,p3,p4,p5,p6,p7;
}
class Value extends LhsPadding{
protected String str;
}
class RhsPadding extends Value{
protected long p1,p2,p3,p4,p5,p6,p7;
}
但是在JAVA8中有个@Contended的注解,可以自动填充缓存行。
执行时,必须加上虚拟机参数-XX:-RestrictContended,@Contended注释才会生效。