Java发生指令重排的几个地方

2021-09-05  本文已影响0人  名字是乱打的

一.指定重排的原则

编译器和处理器不是胡乱的重排序的,他们会遵循一个关键的规则,就是数据依赖规则,如果说一个变量的结果依赖于之前的代码执行结果,那么就不能随意进行重排序,要遵循数据的依赖。

二.指定重排的位置

2.1 编译时

编译后的代码的执行顺序:java里有两种编译器,一个是静态编译器(javac),一个是动态编译器(JIT)

在这个编译的过程中,编译器了提高代码的执行效率,很可能会调整代码的执行顺序。

2.2 处理器执行时候

即使我们给处理器一个代码的执行顺序,处理器也可能会重排代码,更换一种执行顺序。

2.3 内存重排序

有可能一个处理器在实际执行的过程中,在写缓冲器,高速缓存等等一些硬件也能导致指令执行顺序和我们想象的不一样。


如图所示,画红圈的都是可能发生指定重排的地方
上一篇 下一篇

猜你喜欢

热点阅读