JMM——java内存模型

 2019-12-10 15:58  阅读(972)
文章分类:Java Core
  • JMM是什么

JMM
(Java Memory Model)
是Java内存模型,JMM定义了程序中各个共享变量的访问规则,即在虚拟机中将变量存储到内存和从内存读取变量这样的底层细节.

  • 为什么要设计JMM

屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果.

  • 为什么要理解JMM

理解JMM是理解并发问题的基础.

  • 主内存,工作内存和线程三者的交互关系

JMM规定了共享变量都存储在主内存中.每条线程还有自己的工作内存,线程的工作内存保存了主内存的副本拷贝,对变量的操作在工作内存中进行,不能直接操作主内存中的变量.不同线程间无法直接访问对方的工作内存变量,需要通过主内存完成。如下图:
20191210001457\_1.png
20191210001457\_2.png

  • 主内存与工作内存交互协议

JMM定义了8中操作来完成主内存与工作内存的交互。虚拟机保证每种操作都是原子的,不可再分的.8种操作分别是
lock,
unlock,
read,
load,
use,
assign,
store,
write.
把一个变量复制到工作内存,就要顺序的执行read和load操作,从工作内存同步会主内存,就要顺序的执行store和write操作. 对一个变量执行lock操作,将会清空工作内存中此变量的值,在使用前,需要重新执行load或assign操作初始化变量的值 对一个变量unlock操作前,必须先将此变量同步会主内存.
工作内存中的volatile变量在每次使用前要刷新,执行引擎看不到不一致的情况,volatile还禁止指令重排序.

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> JMM——java内存模型

相关推荐