JMM内存模型

本文围绕Java内存模型JMM展开,介绍了JMM是一组规范,关注多线程对共享和私有内存的访问方式。还阐述了JMM与JVM运行时数据区的区别与联系,以及JMM和硬件内存架构的交叉关系,最后讲解了JMM数据同步的8大原子操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考1:一篇解决JMM与volatile详解

参考2:JAVA内存区域和内存模型

 

 

 

1、什么是JMM模型

  • JMM是一种抽象的概念,并不真实存在,是一组规范或者规则;关注的是多个线程对共享内存空间和线程私有工作空间的访问方式,围栏并发的原子性、有序性、可见性来展开的,想要了解JAVA的并发编程,就应该理解JMM。
  • JMM通过定义了对变量(包括实例成员、静态成员和组成数组对象的元素)的访问方式,在程序运行时,运行程序的是实体是线程,每个线程创建时候,虚拟机都会为每个线程分配一定的内存空间,每个线程的内存空间用来存储线程私有的数据。但是JMM中规定数据都是存储在共享的主内存空间,而且每个线程不能直接操作主内存的空间只能访问主内存的空间,且每个线程可以操作自己的工作空间,所以每个线程将自己用到的数据从共享的主内存空间中拷贝一份到其工作空间,操作完之后回写到主内存空间。
  • 线程中的工作空间是私有的,线程之前不能访问对方的工作空间。比如线程A和线程B,A不能访问B的工作空间,同时,B也不能访问A的工作空间。

 2、JVM运行时数据区 和JMM区别 和联系

 

  区别:

     JMM是一种抽象的概念,并不真实存在,是一组规范或者规则,通过规则来控制变量的访问。围绕多并发展开

    运行时数据区域: 在JVM在运行程序时,内存的划分是具体的,是JVM运行时必要的内存划分

联系:

   1、MM中内存有共享的内存空间和线程私有的工作空间,JVM运行时数据区有  方法区、堆、本地方法栈、虚拟机栈、程序计数器

   2、JVM运行时数据区共享的内存空间有   方法区和堆,所以可以理解  JMM的共享内存区域包含了 方法区和栈。JMM的线程私有空间包含了  程序计数器、本地方法栈、虚拟机栈

3、 Java内存模型与硬件内存架构的关系

因为JMM只是一种抽象的概念,是一组规则,并不实际存在,不管是工作内存的数据还是主内存的数据,对于计算机硬件来说都会存储在计算机主内存、CPU缓存和CPU寄存器中,所以Java内存模型和计算机硬件内存架构是一个相互交叉的关系,是一种抽象概念划分与真实物理硬件的交叉。

4、JAVA内存模型数据同步8大原子操作 

1、8大原子操作:
     lock(锁定):把一个变量标记为一条线程独占状态
     unlock(解锁):把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定
     read(读取):把主内存中的一个变量读取传输到线程的工作内存,以便随后load动作使用
     load(加载):把read到线程工作内存的变量放入工作内存的变量副本中
     use(使用):把线程工作内存中的一个变量值传递给执行引擎
     assign(赋值):从执行引擎接收到的新值赋值给变量。返给工作内存
     store(存储):把线程工作内存的一个变量值传递给主内存,以便后面的write使用
     write(写入):把store到主内存的变量值赋值给变量
2、作用于主内存的原子操作: lock、unlock、read、write
3、作用于工作内存的原子操作:load、use 、assign、store

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值