JMM

  • 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值