在java代码到最终执行的指令序列的整个过程中,会出现重排序.也就是说最终执行的顺序并不是按照源代码执行的顺序来进行的.
其中1为编译器的优化重排序,2,3是处理器的重排序.
数据依赖
如果两个操作访问同一个变量的话,而且其中一个为写操作,那么这两个操作是存在数据数据依赖的.
JMM规定,存在数据依赖的操作的执行顺序不能被重排的.这里所说的数据依赖是指的是单个处理器或者单个线程之间的两个操作,对于不同处理器或者不同线程之间的数据依赖不被编译器或者处理器考虑.
as-if-serial语义
指的是不管如何的重排序,最终的处理结果是不能改变的.所以存在数据依赖的操作是不能被重排序的.
时间: 2024-10-05 10:29:38