Java内存模型学习
2017-07-27 本文已影响8人
idioitcbear
- 并发编程模型分类:
- 共享内存:线程之间共享程序的公共状态,线程之间通过写-读内 存中的公共状态来隐式进行通信
- 消息传递:线程之间没有公共状 态,线程之间必须通过明确的发送消息来显式进行通信
在此
Java采用的是共享内存的模型。
-
Java内存模型的抽象
线程之间共享存储在主内存中,每个线程都有一个私有的本地内存,本地内存 中存储了该线程以读/写共享变量的副本。本地内存是 JMM 的一个抽象概念,并不 真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。示意图如下:
内存模型示意图.png
线程A和线程B通讯示意图
线程A和线程B通讯示意图.png - 重排序
为了提高性能一般会进行三重对指令集的重排序 - 编译优化的重排序
- 指令集并行重排序
- 内存系统重排序
- 内存屏障
- load load barriers
- store store barriers
- load store barriers
- store load brarriers
- happen-before原则
- 同一线程中,当前操作happen-before任意后续操作
- 对一个监视器的解锁,happen-before对这个监视器的加锁
- volatile变量原则
- 传递性