一.java内存模型的诞生原因以及作用

  1.诞生原因

    java虚拟机中规范定义的一种内存模型,来屏蔽调各种硬件和操作系统之间的内存访问差异,为了实现java程序在各种平台都能达到一致的内存访问效果。这是它诞生的缘由。

  2.作用

    其实这个内存模型主要就是去定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出来的底层细节,这里的变量,是指实例字段,静态字段,数组等,不包括局部变量和方法参数。

二.内存模型概述

  1.主内存

    所以的变量都存在主内存,这里的内存也就是虚拟机的内存,就是虚拟机在运行时,系统分给虚拟机的内存。

  2.工作内存

    工作内存保存了该线程使用到的变量的主内存副本拷贝,线程对变量的操作必须在工作内存内进行.

                                                     

  3.内存间的交互操作

    lock(锁定):作用于主内存的变量,把一个变量标识为一条线程独占的状态。

    unlock(解锁):释放锁定的变量,这时才可以被其他线程锁定。

    read(读取):主内存读到工作内存。

    load(加载):把从主内存中的获取的变量放入工作内存的变量副本中。

    use(使用):把工作内存的变量加载到执行引擎,当虚拟机遇到一个需要使用变量的字节码的指令时会用到。

    assign(赋值):执行引擎到工作内存。

    store(存储):工作内存传到主内存。

    write(写入):把store传入来的变量放在主内存的变量里。

  4.内存交互操作的规则  

       1.read和load,store和write必须顺序执行,不一定连续执行。

       2.工作内存assign了,值改变了,不能不同步会主内存

    3.没有assign不能返回主内存.

    4.实施use,store之前,要执行assign,和load

    5.一个变量同一时刻只能允许一条线程对其进行lock操作,但是lock可以被同一条线程执行多次。

    6.如果对一个变量进行lock,那么就清空工作内存的值,执行引擎要使用时要重新load和assign(load和assign会引起变量的更新)。

    7.变量没有被lock,不能执行unlock。

    8.执行unlock,要先store和write同步变量回主内存。

转载于:https://www.cnblogs.com/JimmyFanHome/p/9912394.html

Java内存模型解析相关推荐

  1. 【JVM】JVM08(java内存模型解析[JMM])

    ⭐️写在前面 这里是温文艾尔の学习之路

  2. java 内存模型JMM解析

    java 内存模型JMM解析 一.CPU多核并发缓存架构解析    1.以往的内存读取    2.后来的内存读取 二.java内存模型实现原理    1.验证上图模型      1)案列代码      ...

  3. 全网最硬核 Java 新内存模型解析与实验 - 2. 原子访问与字分裂

    个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...

  4. 全网最硬核 Java 新内存模型解析与实验 - 1. 什么是 Java 内存模型

    个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...

  5. 全网最硬核 Java 新内存模型解析与实验 - 4. Java 新内存访问方式与实验

    个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...

  6. 全网最硬核 Java 新内存模型解析与实验 - 3. 硬核理解内存屏障(CPU+编译器)

    个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...

  7. Java内存模型深度解析:final--转

    原文地址:http://www.codeceo.com/article/java-memory-6.html 与前面介绍的锁和Volatile相比较,对final域的读和写更像是普通的变量访问.对于f ...

  8. Java内存模型深度解析:volatile--转

    原文地址:http://www.codeceo.com/article/java-memory-4.html Volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特 ...

  9. Java内存模型深度解析:顺序一致性--转

    原文地址:http://www.codeceo.com/article/java-memory-3.html 数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争.java内存模型规范对数据 ...

最新文章

  1. [原创]商城系统下单库存管控系列杂记(二)(并发安全和性能部分延伸)
  2. Javascript日期时间总结
  3. 信息学奥赛一本通(1138:将字符串中的小写字母转换成大写字母)
  4. 摩托罗拉G7系列发布:G7 Plus还有中国红配色
  5. ASP.NET AJAX1.0尝鲜试用:Web Service调用
  6. Hive 1.1.0 某些字段的查询结果为NULL
  7. 武侠人士的10大绝招
  8. UNIX网络编程读书笔记:原始套接口
  9. Memcached内存分配机制
  10. java位原子_Java原子操作AtomicInteger的用法
  11. Unity web player无法正常使用
  12. Vue+Element ui中常用表单验证----手机号、座机、传真、邮箱、身份证号、数字和带小数点的数字
  13. win7 wif热点
  14. 1、Visual Studio 2017安装
  15. 春季三月各行业活动营销指南
  16. 上海理工大学计算机二级成绩查询,上海理工大学上海市高校计算机等级考试报考通知...
  17. 文件处理与垃圾回收机制
  18. 可以在xmind上同时有两个大主题吗_矩阵图有何用处?XMind完美展示多对多对象间的关系...
  19. 数据挖掘与机器学习:顺序与选择结构
  20. 批量修改 Word 、Excel、PPT 文档中的标题、作者、版本号、公司、创建时间等元数据

热门文章

  1. JavaScript ECMAScript规范里对于分号semicolon用法最权威的定义
  2. via logo html,HTML5 Audio Description (via screenreader)
  3. python 三维数据绘图_Python中三维坐标空间绘制的实现
  4. UE4学习-材质快捷键及材质帮助手册
  5. linux 线程退出 signal,Linux signal 那些事儿 (3)
  6. python hsv inrange 范围_仅20行代码,用python给证件照换底色
  7. 放大器的传递函数_保证放大器的稳定性什么最重要?反馈电阻一定要选对!
  8. sarscape 将dem文件转化成stl_STL源码剖析 阅读笔记(一)介绍
  9. js php 时间格式化字符串,JS怎么实现字符串与日期的互相转换及日期的格式化
  10. python读excel两列为字典_用python读取Excel并保存字典?一两行代码完成骚操作