当前位置:网站首页>JVM运行时数据区与JMM内存模型是什么
JVM运行时数据区与JMM内存模型是什么
2022-08-01 17:56:00 【亿速云】
JVM运行时数据区与JMM内存模型是什么
这篇“JVM运行时数据区与JMM内存模型是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JVM运行时数据区与JMM内存模型是什么”文章吧。
1. JVM 运行时数据区
JVM运行时数据区可以分为元空间,堆,虚拟机栈,本地方法栈,程序计数器五大块。

元空间(方法区):存放类模版对象,是线程共享的区域,在磁盘上,一般不会GC
堆空间:线程共享的区域,对象创建与GC的主要阵地
虚拟机栈:线程私有的,基本组成单位是栈帧,每个栈帧对应一个方法,栈帧组成如下
局部变量表:存放方法变量信息
操作数栈:方法运行的区域
动态链接:指向方法模板对象,与虚方法表一起实现方法重写
返回地址:方法的返回地址
本地方法栈:线程私有,本地方法的执行区域
程序计数器:线程私有,负责在线程上下文切换的过程中记录线程执行到了哪个位置
2. JMM 内存模型
硬件内存模型

通常情况下,当CPU需要读取主存时,它会将主存的部分读到CPU缓存中或者内部寄存器中,然后在寄存器中执行操作。当CPU需要将结果写回到主存中去时,它会将内部寄存器的值刷新到缓存中,然后在某个时间点将值刷新回主存。
在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存,因此就会存在缓存一致性问题。为了解决一致性的问题,需要各个处理器访问缓存时都遵循一些协议,在读写时要根据协议来进行操作,这类协议有MSI、MESI等。
JMM
JMM内存模型将内容分为了线程私有内存与主内存两部分,其与我们之前提到的硬件内存模型的对应关系如下所示:

私有内存与主内存的交互由如下八种操作控制:

3. 可见行与 volatile 关键字
一言以蔽之,volatile 关键字通过内存屏障的形式来阻止指令重排,以维护变量的有序性与可见行。
一行代码到执行的过程中要经历以下的阶段:

volatile 关键字有如下两个作用:
保证被 volatile 修饰的共享变量对所有线程总是可见的,也就是当一个线程修改了被 volatile 修饰共享变量的值,新值总是可以被其他线程立即得知。
禁止指令重排序优化。
JVM中提供了四类内存屏障指令:
loadload:两个读取操作之间
storestore:两个写操作之间
loadstore:读写操作之间
storelosd:写读操作之间
以上就是关于“JVM运行时数据区与JMM内存模型是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
边栏推荐
- QT_QThread线程
- 中信证券是国内十大券商吗?怎么开户安全?
- SQL函数 TO_CHAR(二)
- Solve the problem that MySQL cannot insert Chinese data
- 一加OnePlus 10RT出现在Geekbench上 产品发布似乎也已临近
- 银行案例|Zabbix跨版本升级指南,4.2-6.0不香吗?
- Leetcode75. 颜色分类
- B002 - 基于嵌入式的老人定位追踪监测仪
- 【报错】Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘concat‘)
- 浅谈游戏音效测试点
猜你喜欢

How can become a good architect necessary skills: painting for all the people praise the system architecture diagram?What is the secret?Quick to open this article and have a look!.

B001 - Intelligent ecological fish tank based on STM32

吴恩达机器学习课后习题——kmeans

今年最火爆的词:商业分析,看这一篇就够了!

B001 - 基于STM32的智能生态鱼缸

棕榈油罐区数字化转型

【Day_11 0506】 最近公共祖先

深入分析类加载器

MySQL Lock wait timeout exceeded; try restarting transaction 锁等待

JumpServer堡垒机部署
随机推荐
数字化采购管理系统开发:精细化采购业务流程管理,赋能企业实现“阳光采购”
EpiSci|片上系统的深度强化学习:神话与现实
MySQL 45 讲 | 09 普通索引和唯一索引,应该怎么选择?
QT_QDialog 对话框
ROS2系列知识(7):用rqt_console查看日志logs
指针和解引用
【Day_08 0426】求最小公倍数
【TDP加码福利】COS用户实践征文月,等你来投稿!!!
B011 - 基于51的多功能指纹智能锁
OpenCV安装、QT、VS配置项目设置
成为优秀架构师必备技能:怎样才能画出让所有人赞不绝口的系统架构图?秘诀是什么?快来打开这篇文章看看吧!...
分布式消息队列平滑迁移技术实战
以消费场景为驱动的CMDB要怎么建?
golang json 返回空值
【Day_08 0426】两种排序方法
tooltip 控件
SQL的substring_index()用法——MySQL字符串截取
成都理工大学&电子科技大学|用于强化学习的域自适应状态表示对齐
创造建材数字转型新视界,中建材如何多边赋能集团业务快速发展
opencv语法Mat类型总结