当前位置:网站首页>JVM 运行时数据区与JMM 内存模型详解
JVM 运行时数据区与JMM 内存模型详解
2022-07-31 11:53:00 【Trouvailless】
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:写读操作之间
边栏推荐
- ESP8266-Arduino编程实例-PIR(被动红外)传感器驱动
- vb.net 画曲线
- Redis学习笔记-3.慢查询和其他高级数据结构
- 「R」使用ggpolar绘制生存关联网络图
- Use ODBC in Excel to read data from CDS view on SAP BTP platform
- Distributed Transactions - Introduction to Distributed Transactions, Distributed Transaction Framework Seata (AT Mode, Tcc Mode, Tcc Vs AT), Distributed Transactions - MQ
- 关于IDEA开发工具的介绍
- Candence学习篇(11) allegro中设置规则,布局,走线,铺铜
- 准确率(Accuracy)、精度(Precision)、召回率(Recall)和 mAP 的图解
- Experience innovation and iteration through the development of lucky draw mini-programs
猜你喜欢

WebGL给Unity传递参数问题1: Cannot read properties of undefined (reading ‘SendMessage‘)

deeplab实现自己遥感地质分割数据集

Chrome开发自定义右键菜单实现快速跳转到指定页面

Power BI----几个常用的分析方法和相适应的视觉对象

ESP8266-Arduino编程实例-HDC1008温度湿度传感器驱动

LeetCode - 025. 链表中的两数相加

订song餐系统

一周精彩内容分享(第14期)
![[Virtualization Ecological Platform] Platform Architecture Diagram & Ideas and Implementation Details](/img/a5/29c59399eea5466277a840922bdcef.png)
[Virtualization Ecological Platform] Platform Architecture Diagram & Ideas and Implementation Details

一、excel转pdf格式jacob.jar
随机推荐
在 Excel 内使用 ODBC 消费 SAP ABAP CDS view
How MySQL's allowMultiQueries flag relates to JDBC and jOOQ
JVS低代码能力简介及功能清单
Three-tier architecture service, dao, controller layer
文件包含漏洞
Data Lake (19): SQL API reads Kafka data and writes it to Iceberg table in real time
才22岁!这位'00后'博士拟任职985高校!
Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性
MySQL日志中“binlog”的三种格式玩起来真爽
如何正确地把服务器端返回的文件二进制流写入到本地保存成文件
CoCube群机器人预览→资讯剧透←
生信周刊第38期
Different lower_case_table_names settings for server ('1') and data dictionary ('0') solution
[Go Affair] See through Go's collections and slices at a glance
strings包详细文档+示例
Addition logic for SAP Commerce Cloud Product Review
普林斯顿微积分读本03第二章--编程实现函数图像绘制、三角学回顾
ESP8266-Arduino编程实例-MCP9808数字温度传感器驱动
How to correctly write the binary stream of the file returned by the server to the local file and save it as a file
「R」使用ggpolar绘制生存关联网络图