什么是伪共享 False Sharing?
我对伪共享的认识
1、伪共享:缓存系统是以缓存行(一行为64个字节)为单位供CPU加载数据,一个缓存行内就会存有多个变量,如果有两个线程加载了同一个缓存行内的不同变量,当其中一个线程对它加载的变量进行修改时,由于CPU为保证缓存的有效性的MESI协议,这个缓存行就会失效,需要重新读取缓存,频繁的缓存失效会严重影响机器的并发执行效率。
2、伪共享的解决方法:在jdk8之前需要通过填充缓存行的方式解决伪共享,就是写一个填充缓存行的包装类,把存有需要用到的变量的缓存行里增加其它无关的数据使之达到一个缓存行(64字节)的标准;在jdk8之后,Java原生支持@Contended注解来避免伪共享。