作为了解内容
如果多个核的线程在操作同一个缓存行中的不同变量数据,那么就会出现频繁的缓存失效,即使在代码层面看这两个线程操作的数据之间完全没有关系。这种不合理的资源竞争情况就是伪共享(False Sharing)。
通俗说。就是两个不相干的线程、操作的不相关的变量,然而不相关的变量在同一个缓存行中。其中一个线程操作变量,会导致另一个线程读取的到缓存行失效(因为缓存一致性协议就是以缓存行,为操作单位的)
解决方案:
1.缓存行填充,即使用无效数据填充缓存行,避免和其他变量共享缓存行
2.使用 @sun.misc.Contended 注解(java8)(需要配置jvm参数:-XX:-RestrictContended)