Java内存模型
1.工作内存和主内存
Java内存模型规定所有的变量都存储在主内存中(JVM内存的一部分),每个线程有自己独立的工作内存,它保存了被该线程使用的变量的主内存复制。线程对这些变量的操作都在自己的工作内存中进行,不能直接操作主内存和其他工作内存中存储的变量或者变量副本。线程间的变量访问需通过主内存来完成,三者的关系如图1所示。

2.Java内存交互协议
Java内存模型定义了8种操作来完成主内存和工作内存的变量访问,具体如下。
· lock:主内存变量,把一个变量标识为某个线程独占的状态。
· unlock:主内存变量,把一个处于锁定状态变量释放出来,被释放后的变量才可以被其他线程锁定。
· read:主内存变量,把一个变量的值从主内存传输到线程的工作内存中,以便随后的load动作使用。
· load:工作内存变量,把read读取到的主内存中的变量值放入工作内存的变量副本中。
· use:工作内存变量,把工作内存中变量的值传递给Java虚拟机执行引擎,每当虚拟机遇到一个需要使用到变量值的字节码指令时,将会执行该操作。
· assign:工作内存变量,把从执行引擎接收到的变量的值赋值给工作变量,每当虚拟机遇到一个给变量赋值的字节码时,将会执行该操作。
· store:工作内存变量,把工作内存中一个变量的值传送到主内存中,以便随后的write操作使用。
· write:主内存变量,把store操作从工作内存中得到的变量值放入主内存的变量中。

转载于:https://www.cnblogs.com/htkj/p/10932552.html

锁底层之内存屏障与原语指令相关推荐

  1. 关于缓存一致性协议、MESI、StoreBuffer、InvalidateQueue、内存屏障、Lock指令和JMM的那点事

    前言 事情是这样的,一位读者看了我的一篇文章,不认同我文章里面的观点,于是有了下面的交流. 可能是我发的那个狗头的表情,让这位读者认为我不尊重他.于是,这位读者一气之下把我删掉了,在删好友之前,还叫我 ...

  2. JVM从入门到精通(四):内存屏障与JVM指令,对象的内存布局

    JMM 硬件层数据一致性 协议很多,intel 用MESI https://www.cnblogs.com/z00377750/p/9180644.html 现代CPU的数据一致性实现 = 缓存锁(M ...

  3. java内存屏障详解_图文带你了解volatile底层和内存屏障之间的关系

    欢迎大家搜索"小猴子的技术笔记"关注我的公众号,有问题可以及时和我交流. LoadLoad Barriers:在两个读指令之间插入一个"LoadLoad"的内存 ...

  4. 两个例子详解并发编程的可见性问题和有序性问题,通过volatile保证可见性和有序性以及volatile的底层原理——缓存一致性协议MESI和内存屏障禁止指令重排

    1. 并发编程的可见性问题 2. 并发编程的有序性问题 3. 使用volatile关键字解决可见性问题 4. 可见性问题的本质--缓存不一致 因为cpu执行速度很快,但是内存执行速度相对于CPU很慢, ...

  5. 汇编为什么分段执行总是执行不了_iOS汇编教程(六)CPU 指令重排与内存屏障...

    系列文章 iOS 汇编入门教程(一)ARM64 汇编基础 iOS 汇编入门教程(二)在 Xcode 工程中嵌入汇编代码 iOS 汇编入门教程(三)汇编中的 Section 与数据存取 iOS 汇编教程 ...

  6. 什么是指令重排序和内存屏障,看完你就懂了

    面试官在问到多线程编程的时候,指令重排序.内存屏障经常会被提起.如果你对这两者有一定的理解,那这就是你的加分项. (一)什么是指令重排序 为了使处理器内部的运算单元能尽量被充分利用,处理器可能会对输入 ...

  7. 十一、kotlin的协程 - 缓存、volatile、内存屏障和cas(四) --- 跑题篇

    本章写着写着就跑题了, 又不舍得删除, 新手看 # 协程的共享变量安全问题简单入门和## volatile 不保证原子性部分代码, 其他可以不看, 太乱, 也没用 协程的共享变量安全问题简单入门 在使 ...

  8. 处理器协同机制其二内存屏障与内存顺序(及Store Buffer与Invalidate Queue)

    目录 处理器协同机制其一缓存一致性协议(MESI) 处理器协同机制其二内存屏障与内存顺序(及Store Buffer与Invalidate Queue) 处理器协同机制其三C++内存顺序与栅栏(及依赖 ...

  9. java内存屏障的原理与应用

    目录 1. java内存屏障 2.java内存屏障的使用 一. java内存屏障 1.1 什么是内存屏障(Memory Barrier)? 内存屏障(memory barrier)是一个CPU指令.基 ...

最新文章

  1. 如何列出Git 1.7+中的所有远程分支?
  2. Go 结构体的值传递和地址传递
  3. php设计模式的六大原则(六):迪米特法则
  4. PHP Cookbook读书笔记 – 第16章互联网服务
  5. 那些相似的CRM之间究竟有无区别
  6. Compile warning: Embedded binary's NSExtensionActivationRule is TRUEPREDICATE
  7. 计算机电路板工作原理,充电宝电路板原理图的说明
  8. matlab线性同余发生器,线性同余法生成伪随机数
  9. Hadoop详解(二)——HDFS的命令,执行过程,Java接口,原理详解。RPC机制
  10. webpack+plugin插件机制+weboack dev server工具
  11. 保险中介3.0时代:数字化中介在场景中打造核心竞争力
  12. jdk版本问题导致的error: reference to query is ambiguous
  13. 分析很透彻 一个大学教师眼中的未来房价趋势
  14. 从ccps项目中学习bottle,sqlalchemy,jinja2
  15. Revit二次开发入门秘籍 01如何入门
  16. RK3288 开发板 运行android6.0.1 如何通过i2c_detect 侦测i2c 设备
  17. 【机器学习】机器学习之多元线性回归
  18. Python|实验项目八例
  19. Javascript脚本运行的方式(js写在页面什么地方)
  20. asp.net(c#)字符串转换成字符数组 字符串转换成int 数组

热门文章

  1. BugkuCTF-Crypto题杰斐逊
  2. linux优化pdf,linux系统安全和优化.pdf
  3. mysql8.0.11启动不了_8.0.11版本Mysql遇到MySQL 服务无法启动的解决方法
  4. 简述osi参考模型各层主要功能_OSI网络模型
  5. php io流 读取wav,记php中的io流---帮助理解
  6. ubuntu启动php-fpm_ubuntu安装php-fpm+xdebug
  7. 工业机器人导轨 百度文库_工业机器人或许开创一个全新的PLC时代
  8. 变频器输出功率_100米的深井泵,如何接变频器,怎样控制
  9. 解决IDEA中maven工程的jsp、jstl依赖导入了 ,但是 jsp页面的uri却不提示(手动输上也报红)
  10. 什么是写一个java类,Java什么是类?class的相关介绍