概念
cup一次读取的数据是缓存行,按块(64位处理器每次处理 8Byte(64bit) )进行读取,也就是说缓存行是CUP与内存交互的最小工作单元就是缓存行
假设内存中有a和b两个int类型的变量
没有对齐填充时,A线程只想要读取a,但a只占4字节,因此会连带b也会一并读取到缓存行中;而同一时刻B线程只想要读取b,但b只占4字节,因此会连带a也会一并读取到缓存行中;那么这种情况下就会存在伪共享问题,这会导致A和B线程在进行数据操作时会频繁地直接去内存获取最新值,而不是从高速缓存中获取(也就是缓存失效),导致运算速度下降。
而进行对齐填充后,A线程在读取缓存行数据时,原本a只是占4字节,那么此时就会填充4字节以达到8字节地倍数,这样读取的缓存行数据就是会存在a数据,B线程读取的缓存行数据只有b数据,这是空间换取时间,解决缓存行失效问题(伪共享问题)。
通过注解进行填充
@Contended 对
jvm启动参数:【-XX:RestrictContended】