当前位置:网站首页 > 数据科学与大数据 > 正文

jvm内存模型中的概念(jvm内存模型和运行时数据区)



JVM运行时数据区可以分为元空间,堆,虚拟机栈,本地方法栈,程序计数器五大块。

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

通常情况下,当CPU需要读取主存时,它会将主存的部分读到CPU缓存中或者内部寄存器中,然后在寄存器中执行操作。当CPU需要将结果写回到主存中去时,它会将内部寄存器的值刷新到缓存中,然后在某个时间点将值刷新回主存。

在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存,因此就会存在缓存一致性问题。为了解决一致性的问题,需要各个处理器访问缓存时都遵循一些协议,在读写时要根据协议来进行操作,这类协议有MSI、MESI等。

JMM内存模型将内容分为了线程私有内存与主内存两部分,其与我们之前提到的硬件内存模型的对应关系如下所示:

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

一言以蔽之,volatile 关键字通过内存屏障的形式来阻止指令重排,以维护变量的有序性与可见行。

一行代码到执行的过程中要经历以下的阶段:

volatile 关键字有如下两个作用:

  • 保证被 volatile 修饰的共享变量对所有线程总是可见的,也就是当一个线程修改了被 volatile 修饰共享变量的值,新值总是可以被其他线程立即得知。
  • 禁止指令重排序优化。

JVM中提供了四类内存屏障指令:

  • loadload:两个读取操作之间
  • storestore:两个写操作之间
  • loadstore:读写操作之间
  • storelosd:写读操作之间

到此这篇关于JVM 运行时数据区与JMM 内存模型的文章就介绍到这了,更多相关JMM 内存模型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

到此这篇jvm内存模型中的概念(jvm内存模型和运行时数据区)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 大数据算法是仅在电子计算机上运行的算法(大数据算法是仅在电子计算机上运行的算法对吗)2025-11-08 10:09:07
  • 中文全文数据库有哪些内容(中文全文数据库有哪些内容组成)2025-11-08 10:09:07
  • 达梦客户端安装 linux(达梦数据库linux安装步骤)2025-11-08 10:09:07
  • 大数据课程岗前培访(大数据培训课程安排)2025-11-08 10:09:07
  • 怎样安装数电票纳税人端打印控件(电子发票在税控盘怎样打印数据)2025-11-08 10:09:07
  • 小米手机的数据怎么转移到vivo(小米手机的数据怎么转移到苹果手机)2025-11-08 10:09:07
  • linux 连接redis数据库(linux连接redis集群)2025-11-08 10:09:07
  • springboot数据库密码加密(java spring boot 数据库密码解密)2025-11-08 10:09:07
  • orcal数据库安装教程(如何安装oracle数据库实例)2025-11-08 10:09:07
  • 自动驾驶数据标注员是干嘛的(自动驾驶数据标注工作内容)2025-11-08 10:09:07
  • 全屏图片