JVM 重排序

Posted 平林新袖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM 重排序相关的知识,希望对你有一定的参考价值。

  在java代码到最终执行的指令序列的整个过程中,会出现重排序.也就是说最终执行的顺序并不是按照源代码执行的顺序来进行的.

技术分享

其中1为编译器的优化重排序,2,3是处理器的重排序.

数据依赖

  如果两个操作访问同一个变量的话,而且其中一个为写操作,那么这两个操作是存在数据数据依赖的.  

  技术分享

  JMM规定,存在数据依赖的操作的执行顺序不能被重排的.这里所说的数据依赖是指的是单个处理器或者单个线程之间的两个操作,对于不同处理器或者不同线程之间的数据依赖不被编译器或者处理器考虑.

  

as-if-serial语义

  指的是不管如何的重排序,最终的处理结果是不能改变的.所以存在数据依赖的操作是不能被重排序的.  

以上是关于JVM 重排序的主要内容,如果未能解决你的问题,请参考以下文章

jvm重排序

并发 JVM-JMM和底层实现原理

指令重排序

JVM的重排序

JVM技术专题 深入分析字节码指令重排序技术「原理篇」

Thread---重排序