指令重排

阅读更多

1.什么是指令重排

程序指令的执行顺序有可能和代码的顺序不一致,这个过程就称之为指令重排。

2.指令重排的作用

JVM能根据处理器的特性,充分利用多级缓存,多核等进行适当的指令重排序,使程序在保证业务运行的同时,充分利用CPU的资源,发挥最大的性能!

由于指令重排的特性,为了保证程序在多线程的条件下运行结果能够与单一线程下一致,引入了Happens-Before规则。也就是说,Happens-Before规则主要是用来确保并发情况下数据的正确性。

3.Happens-Before的含义

如果动作B要看到动作A的执行结果,无论A/B是否在同一个线程中,那么A/B必须满足happens-before规则。

4. happens-before规则

1)如果ActionA和ActionB属于同一个线程,那么就说明ActionA happens-before ActionB。
2)如果ActionA是unlock操作,而ActionB是lock操作,那么ActionA happens-before ActionB。
3)如果A是对volatile变量的写操作,ActionB是对同一个变量的读操作,那么ActionA happens-before ActionB。
4)线程的启动Action happens-before 该线程上的其他动作。
5)线程中任何Action都 happens-before 任何其他线程检测到该线程已经结束、Thread.join调用成功返回,Thread.isAlive返回false6)一个线程调用另一个线程的interrupt一定发生在另一个线程中断之前。
7)一个对象的构造函数结束一定发生在兑现finalizer之前。
8)ActionA发生在ActionB之前,ActionB发生在ActionC之前,则ActionA一定发生在ActionC之前。
ActionA happends-before ActionB,记作hb(ActionA,ActionB)。

5. JMMA(Java Memory Model Action)

Java模型动作,一个Action包含,变量读取、变量写、监视器枷锁、释放锁、线程启动(start)、线程等待(join)。

6. happens-before应用的例子



作者:clarityblack
链接:https://www.jianshu.com/p/f361345d06f6
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

你可能感兴趣的:(指令重排)