JMM

来源:互联网 发布:局域网可以共享网络吗 编辑:程序博客网 时间:2024/05/10 07:22
  • JMM是什么
JMM(Java Memory Model)是Java内存模型,JMM定义了程序中各个共享变量的访问规则,即在虚拟机中将变量存储到内存和从内存读取变量这样的底层细节.
  • 为什么要设计JMM
屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果.
  • 为什么要理解JMM
理解JMM是理解并发问题的基础.
  • 主内存,工作内存和线程三者的交互关系
JMM规定了共享变量都存储在主内存中.每条线程还有自己的工作内存,线程的工作内存保存了主内存的副本拷贝,对变量的操作在工作内存中进行,不能直接操作主内存中的变量.不同线程间无法直接访问对方的工作内存变量,需要通过主内存完成。如下图:

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