Java内存模型JMM

深入理解Java虚拟机 12.3节笔记

什么是Java内存模型?

  • 主内存+工作内存;
  • 定义了一些操作协议,来规范对主内存、工作内存的访问;
  • 定义了共享变量的访问规则,即如何将对象写入内存,从内存种取出

类比计算机内存模型

由于CPU与内存之间速度不匹配,所以引入了缓存,由此导致了缓存一致性问题,需要协议来约定如何对主内存、高速缓存读写

Java内存模型定义了8种操作来规范对主内存、工作内存进行访问的过程

 八种操作如下

  • lock,unlock对主内存变量进行加锁,解锁,只允许一个线程访问,synchronized的底层指令monitorenter即可看成是这类
  • read--load--use 变量从主内存--工作内存--执行引擎的三个指令
  • assign--store--write 变量从执行引擎--工作内存--主内存的三个指令

 每个操作对于基本数据类型(除了double,long)是原子的

volatile变量的特殊规则

  • 可见性
    • 共享变量修改后直接刷回主内存
    • 每次使用时重新从主内存读
  • 禁止指令重排序优化
    • 内存屏障,之后的指令不能被重排到屏障前面

先行发生原则

判断数据是否存在竞争、线程是否安全的主要依据,操作A先于操作B发生,则A产生的影响能为B可见

一些规则:

  • 线程启动 先于 线程的每一个动作
  • 线程动作 先于 终止
  • 对象终结 先于 初始化
  • unlock   先于 同一次锁的下一次的lock
  • volatile变量的写 先于 读
  • 传递性

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值