JMM与volatile

JMM模型

image.png

八大原子操作

image.png

(1)lock(锁定):作用于主内存的变量,把一个变量标记为一条线程独占状态
(2)unlock(解锁):作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定
(3)read(读取):作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动作使用
(4)load(载入):作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中
(5)use(使用):作用于工作内存的变量,把工作内存中的一个变量值传递给执行引擎
(6)assign(赋值):作用于工作内存的变量,它把一个从执行引擎接收到的值赋给工作内存的变量
(7)store(存储):作用于工作内存的变量,把工作内存中的一个变量的值传送到主内存中,以便随后的write的操作
(8)write(写入):作用于工作内存的变量,它把store操作从工作内存中的一个变量的值传送到主内存的变量中

三大特性

  • 有序
    JMM解决方式:synchronized与Lock加锁,关键字volatile保证一定的有序性
  • 原子
    JMM解决方式:synchronized与Lock加锁
  • 可见性
    JMM解决方式:synchronized与Lock加锁,关键字volatile

指令重排序

volatile禁止重排优化:利用硬件层的内存屏障

  • 硬件层内存屏障
  1. lfence,是一种Load Barrier 读屏障
  2. sfence, 是一种Store Barrier 写屏障
  3. mfence, 是一种全能型的屏障,具备ifence和sfence的能力
  4. Lock前缀,Lock不是一种内存屏障,但是它能完成类似内存屏障的功能。Lock会对CPU总线和高速缓存加锁,可以理解为CPU指令级的一种锁。它后面可以跟ADD,ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, DEC, INC, NEG, NOT, OR,SBB, SUB, XOR, XADD, and XCHG等指令。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 引言 本篇文章结合我个人对Java内存模型的理解以及相关书籍资料为前提全面剖析JMM内存模型,本文的书写思路先阐述...
    竹子爱熊猫阅读 9,287评论 3 26
  • 15. JMM 请你谈谈你对Volate的理解 Volate是java虚拟机提供轻量级的同步机制 保证可见性 不保...
    笨比乔治阅读 1,801评论 0 1
  • 计算机多核并发缓存架构 下图是计算机运行架构图:   由于cpu的运行程序速度远大于主存储的速度,所以会在主存RA...
    _zhaoyan_阅读 5,142评论 0 5
  • 面试中:请你谈谈对Volatile的理解: Volatile是Java虚拟机提供的轻量级的同步机制 保证可见性(和...
    i小雨阅读 2,738评论 0 3
  • 一、现代计算机模型 冯诺依曼计算机是由控制器、运算器、存储器、输入、输出构成。但现代计算机模型要复杂的多,其中CP...
    蓝色_笔记本阅读 2,361评论 0 0

友情链接更多精彩内容