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

JMM模型学习记录

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

JMM模型学习记录

JMM模型涉及到的内容还是很多的,总是不理解它的这个循序渐进的过程,还是记录一下。
一、JMM模型是什么?

Java Memory Model:java内存模型。JMM模型就是Java自己的一套协议,用来屏蔽不同硬件和操作系统之间的内存访问逻辑的差异,实现平台一致性,到达最终的“一次编写,到处运行”。实际上,它就是一种抽象概念,是JVM在计算机内存中的工作方式,规范了JVM如何与计算机内存进行交互。JMM模型定义了线程和主内存之间的关系。

二、计算机的硬件结构

在引出JMM模型之前,需要先介绍一下计算机的硬件结构,因为JMM模型实际上是一种抽象的概念,并不是真实的,其中的工作内存实际上指的是寄存器和CPU 缓存等这些东西,它是屏蔽了这些差异。那么硬件结构如下图所示。

 这也就是说,CPU并不能直接对内存中的数据进行计算。因为CPU和内存的处理速度差距很大,所以主存读取数据后,先放在了CPU缓存中,当这些数据需要也CPU进行交互的时候,在将其加入到寄存器中,最后被CPU使用。

二、JMM模型图

JMM模型定义了线程和主内存之间的关系,线程之间的共享变量存放在主内存中,每个线程都有私有的本地内存,本地内存中储存了共享变量的副本。


图中涉及到的工作内存和主内存的概念 

主内存:主要存放的Java中的实例对象,还有常量,类信息,静态变量这些共享数据。

工作内存:线程私有,主要存放当前方法的所有本地变量信息,也就是线程的私有数据,其他线程访问不到。    

三、JMM涉及到的并发问题 .线程之间的通信

在编程中,线程通信机制有两种:共享内存和消息传递。

共享内存:

线程之间共享程序的公共状态,线程之间通过写-读来操作内存中的公共状态,从而进行隐式的通信,典型的共享内存通信方式就是通过共享对象进行通信。

消息传递:

在消息传递的并发模型中,线程之间没有公共状态,它们必须通过明确的发送消息来显式通信,在Java中典型的消息传递的方式:wait()和notify()

线程间的同步:

在内存并发模型中,同步是显式的,意为:控制不同线程之间操作发生的相对顺序。必须是指定哪个方法或者代码块在线程之间互斥执行。

在消息传递的并发模型中,由于消息的发送必须在消息的接受之前的,所以同步是隐式的。

四、JMM缓存不一致问题

既然涉及到了多线程,肯定就会有这类问题,那么主要有两种解决方案。

1.总线加锁

也就是说当线程从主内存中读取数据时,会先在总线对数据进行加锁,使用完释放,其他线程才能读或者写。

 2.MESI缓存一致性协议

就是如果某个线程在其工作内存中修改了共享变量的数据值,那么其他线程通过总线嗅探机制感知到数据的变化,从而使自己缓存的数据失效。

五、内存交互操作流程图

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

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

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