Java内存模型-指令重排序&顺序一致性
章节目录 1.重排序定义 2.数据依赖性 3.as-if-serial语义 4.程序顺序规则 5.JMM 参考 顺序一致性内存模型的实践规范 1.重排序定义 重排序是指编译器和处理器为优化程序性能而对指令序列重新排序的一种手段。 2.数据依赖性 如果两个操作访问同一个变量,且两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。 如下表所示,是我们常见的数据依赖性场景: 操作模式 代码示例 说明 store->load a=1;b=a; 写一个变量后,再读这个位置 store->store a=1;a=2 写一个变量之后,再写这个变量 load->store a=b;b=1 读一个变量之后,再写这个变量 注意: 上述指令重排序之后,执行结果就会发生变化,所以编译器和处理器不会改变存在数据依赖关系的两个操作的执行顺序。仅针对于单个处理器中执行的指令序列和单个线程中执行的操作。 3.as-if-serial 语义 对于不存在数据依赖性的操作可以做指令重排序。as-if-serial语义把单线程程序保护了起来。 4.程序顺序规则 如果A happens-before...