栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

一起来看看什么是JMM模型

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一起来看看什么是JMM模型

一起来看看什么是JMM模型

JMM(Java Memory Model)是java内存模型,是一种规范、规则,一种抽象的概念。通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。那么JMM规定的访问方式是怎样的,JMM规定,所有的变量必须存储在主内存当中,每个线程访问主内存的变量时,不能直接访问,而是在本线程内开辟一块工作内存,将主内存中的变量复制到工作内存中,线程才可以进行访问。

  • 主内存:存储Java实例对象。
  • 工作内存:存储当前方法的所有本地变量信息(工作内存中存储着主内存中的变量副本拷贝)。
JVM与JMM的区别

JVM是java虚拟机,是负责管理内存的。JMM是java内存模型,是一种抽象的概念,并不真实存在,规定了程序中各个变量的访问方式,侧重于围绕原子性、有序性、可见性。

JMM与硬件内存架构的关系

前面我们说到,JMM是并不真实存在的,在硬件内存中并不知道JMM内存模型的存在,因此,多线程的执行最终还是会回归到硬件架构中。

为什么需要JMM

假设我们遇到了以下场景:

现在我有两个线程,分别是线程A、线程B,在JMM规范下,他们是有各自的工作内存的,假设现在他们分别要对主内存共享变量x=6进行修改操作,A想要修改x为1,B想要修改x为2,那么x最终的结果是不确定的,要看先执行谁,这就导致了主内存与工作内存数据不一致性的问题。因此我们需要JMM协议去规范这一些问题。

并发编程的原子性、有序性、可见性问题 原子性

原子性顾名思义,是指操作是不可中断的、一气呵成的。

JMM保证原子性:JMM协议是通过synchronized关键字去保证原子性的。

有序性

在cpu执行指令时,他会对指令进行优化,也就是我写在下面的代码有可能在cpu指令优化的作用下提前执行,但是前提都是保证我们的执行结果是正确的。但有时指令优化也会带来一系列的问题,因此需要去保证有序性。

JMM保证有序性:JMM协议是通过volatile关键字去保证原子性的。

可见性

可见性是指一个线程能否读到变量x最新的值,因为变量x有可能会被其他线程修改值。

JMM保证可见性:JMM协议是通过volatile关键字去保证原子性的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/602691.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号