在執行程序时,为了提高性能,编译器和处理器常常会对指令做重复排序;重复排序分3种类型;
1.编译器优化的重排序.编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序;
2.指令级并行的重排序.现代处理器采用了指令级并行技术(Instruction-Level-Parallelism,ILP)来将多条指令重叠执行.如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序;
3.内存系统的重排序.由于处理器使用缓存和读/写缓冲区,这使得加载和存储操作看上去可能是在乱序执行;
从JAVA源代码到最终实际执行的指令,会分别经历下面三种重排序,
源代码 ----------->1.编译器,优化重排序 ----------------->2.指令级,并行重排序 ----------------->3.内存系统重排序,-------->最终执行的指令序列;