当前位置:网站首页>JVM 运行时数据区与JMM 内存模型详解
JVM 运行时数据区与JMM 内存模型详解
2022-08-01 08:14:00 【肥肥技术宅】
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:写读操作之间

边栏推荐
- VoLTE Basic Learning Series | Enterprise Voice Network Brief
- HoloView -- Tabular Datasets
- 22牛客多校1 I. Chiitoitsu (概率dp)
- 三维坐标系距离
- 最新的Cesium和Three的整合方法(附完整代码)
- Golang: go get url and form attribute value
- How to get page data
- Flink SQL - client, how to deal with the source side and to increase the target, the SQL - client including mapping table and the JOB such as
- C语言中编译时出现警告C4013(C语言不加函数原型产生的潜在错误)
- pytest接口自动化测试框架 | parametrize叠加使用
猜你喜欢

云原生FAQ

案例实践 --- Resnet经典卷积神经网络(Mindspore)

微信小程序请求封装

Redis学习
![[Tear AHB-APB Bridge by hand]~ Why aren't the lower two bits of the AHB address bus used to represent the address?](/img/fb/c95c5857024db001638cd484c5e78f.png)
[Tear AHB-APB Bridge by hand]~ Why aren't the lower two bits of the AHB address bus used to represent the address?

special day to remember

基于MySql,Redis,Mq,ES的高可用方案解析

Chapters 6 and 7 of Huawei Deep Learning Course

How to use Photoshop to composite star trail photos, post-processing method of night sky star trail photos

网络个各种协议
随机推荐
电磁兼容简明教程(6)测试项目
372. 超级次方
最新的Cesium和Three的整合方法(附完整代码)
正则表达式符号
小程序全面屏手势配置案例
套接字选项
MySQL query advanced - from the use of functions to table joins, do you remember?
将aof文件转换为命令waoffle安装和使用
网络个各种协议
基于tika实现对文件类型进行判断
力扣每日一题-第44天-290. 单词规律
LabVIEW RT中的用户界面更新速度
Centos install php7.4, build hyperf, forward RDS
gethostbyname \ getaddrinfo 解析域名IP地址不安全的原因
zip打包目录所有文件(含隐藏文件/夹)
力扣周赛304 6135. 图中的最长环 内向基环树
HoloView -- Tabular Datasets
XX市消防救援指挥中心实战指挥平台多链路聚合解决方案实例
华为深度学习课程第九章——卷积神经网络以及案例实践
走进音视频的世界——mp3封装格式