当前位置:网站首页>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:写读操作之间
边栏推荐
- Android studio connects to MySQL and completes simple login and registration functions
- 安装MYSQL遇到问题:write configuration file卡主
- Chrome开发自定义右键菜单实现快速跳转到指定页面
- 一文带你了解redux的工作流程——actionreducerstore
- Redis学习笔记-3.慢查询和其他高级数据结构
- Candence学习篇(11) allegro中设置规则,布局,走线,铺铜
- 最近两个月谷歌 ad 掉的厉害
- JVS设置不同应用的登录时效时间
- Caused by: 类找不到: org.apache.flink.table.planner.delegation.ParserFactory或者ExecutorFactory
- MySQL 行级锁(行锁、临键锁、间隙锁)
猜你喜欢
The item 'node.exe' was not recognized as the name of a cmdlet, function, script file, or runnable program.
文件包含漏洞
瑞吉外卖项目:新增菜品与菜品分页查询
生信周刊第38期
3.网页信息解析方法:Xpath与BeautifulSoup
学习爬虫之Scrapy框架学习(1)---Scrapy框架初学习及豆瓣top250电影信息获取的实战!
Redis学习笔记-3.慢查询和其他高级数据结构
Distributed Transactions - Introduction to Distributed Transactions, Distributed Transaction Framework Seata (AT Mode, Tcc Mode, Tcc Vs AT), Distributed Transactions - MQ
若枚举映射的值不存在,则不进行反序列化
Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性
随机推荐
Caused by: 类找不到: org.apache.flink.table.planner.delegation.ParserFactory或者ExecutorFactory
「R」使用ggpolar绘制生存关联网络图
Shengxin Weekly Issue 38
AWS Amazon cloud account registration, free application for 12 months Amazon cloud server detailed tutorial
最新MySql安装教学,非常详细
Is the working process of the belt you know the story - actionreducerstore
5 个开源的 Rust Web 开发框架,你选择哪个?
Chrome开发自定义右键菜单实现快速跳转到指定页面
After Effects 教程,如何在 After Effects 中修复曝光不足的镜头?
ApiPost 真香真强大,是时候丢掉 Postman、Swagger 了
R 语言data.frame 中的另一行中减去一行
Power BI----几个常用的分析方法和相适应的视觉对象
Data Persistence Technology - MP
Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性
deeplab implements its own remote sensing geological segmentation dataset
荣耀手机参数写错,客服认为没错
初始JDBC 编程
CoCube群机器人预览→资讯剧透←
应用层基础 —— 认识URL
生命不息,刷题不止,简单题学习知识点