指令重排序指的是JIT编译器、cpu处理器和jmm定义的多级缓存存储,在编译字节码和运行机器指令时,在不影响程序最终执行结果的状况下,会对原语句执行的顺序进行优化。jmm多级缓存会让语句的执行并不必定是按照正确的读写操做进行的。可是这些都是jmm所容许的操做。所以须要经过同步来禁止相关的指令重排序,如内存屏障。数组
参考资料:缓存
指令重排排序
对于编译器的编写者来讲,Java内存模型(JMM)主要是由禁止指令重排的规则所组成的,其中包括了字段(包括数组中的元素)的存取指令和监视器(锁)的控制指令。内存