Java内存模型解析
一.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内存模型解析相关推荐
- 【JVM】JVM08(java内存模型解析[JMM])
⭐️写在前面 这里是温文艾尔の学习之路
- java 内存模型JMM解析
java 内存模型JMM解析 一.CPU多核并发缓存架构解析 1.以往的内存读取 2.后来的内存读取 二.java内存模型实现原理 1.验证上图模型 1)案列代码 ...
- 全网最硬核 Java 新内存模型解析与实验 - 2. 原子访问与字分裂
个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...
- 全网最硬核 Java 新内存模型解析与实验 - 1. 什么是 Java 内存模型
个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...
- 全网最硬核 Java 新内存模型解析与实验 - 4. Java 新内存访问方式与实验
个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...
- 全网最硬核 Java 新内存模型解析与实验 - 3. 硬核理解内存屏障(CPU+编译器)
个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...
- Java内存模型深度解析:final--转
原文地址:http://www.codeceo.com/article/java-memory-6.html 与前面介绍的锁和Volatile相比较,对final域的读和写更像是普通的变量访问.对于f ...
- Java内存模型深度解析:volatile--转
原文地址:http://www.codeceo.com/article/java-memory-4.html Volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特 ...
- Java内存模型深度解析:顺序一致性--转
原文地址:http://www.codeceo.com/article/java-memory-3.html 数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争.java内存模型规范对数据 ...
最新文章
- [原创]商城系统下单库存管控系列杂记(二)(并发安全和性能部分延伸)
- Javascript日期时间总结
- 信息学奥赛一本通(1138:将字符串中的小写字母转换成大写字母)
- 摩托罗拉G7系列发布:G7 Plus还有中国红配色
- ASP.NET AJAX1.0尝鲜试用:Web Service调用
- Hive 1.1.0 某些字段的查询结果为NULL
- 武侠人士的10大绝招
- UNIX网络编程读书笔记:原始套接口
- Memcached内存分配机制
- java位原子_Java原子操作AtomicInteger的用法
- Unity web player无法正常使用
- Vue+Element ui中常用表单验证----手机号、座机、传真、邮箱、身份证号、数字和带小数点的数字
- win7 wif热点
- 1、Visual Studio 2017安装
- 春季三月各行业活动营销指南
- 上海理工大学计算机二级成绩查询,上海理工大学上海市高校计算机等级考试报考通知...
- 文件处理与垃圾回收机制
- 可以在xmind上同时有两个大主题吗_矩阵图有何用处?XMind完美展示多对多对象间的关系...
- 数据挖掘与机器学习:顺序与选择结构
- 批量修改 Word 、Excel、PPT 文档中的标题、作者、版本号、公司、创建时间等元数据
热门文章
- JavaScript ECMAScript规范里对于分号semicolon用法最权威的定义
- via logo html,HTML5 Audio Description (via screenreader)
- python 三维数据绘图_Python中三维坐标空间绘制的实现
- UE4学习-材质快捷键及材质帮助手册
- linux 线程退出 signal,Linux signal 那些事儿 (3)
- python hsv inrange 范围_仅20行代码,用python给证件照换底色
- 放大器的传递函数_保证放大器的稳定性什么最重要?反馈电阻一定要选对!
- sarscape 将dem文件转化成stl_STL源码剖析 阅读笔记(一)介绍
- js php 时间格式化字符串,JS怎么实现字符串与日期的互相转换及日期的格式化
- python读excel两列为字典_用python读取Excel并保存字典?一两行代码完成骚操作