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