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

3.3.3 JMM Java内存模型

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

3.3.3 JMM Java内存模型

JMM

Java内存模型(JMM,并非JVM内存模型)是一个抽象的规范,保证Java程序在各种平台下对内存的访问都能得到一致的效果。

线程之间的通信通常有两种方式:共享内存和消息传递。Java的并发采用共享内存的方式
共享内存和消息传递

简述

JMM规定了内存主要划分为主内存和工作内存两种。
规定所有的变量都存储在主内存中,每条线程还有自己的工作内存。
线程的工作内存中保存了该线程中用到的变量的主内存的副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。
不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。

JMM对应到具体的硬件模型

本地内存对速度要求更高,大部分使用寄存器和CPU缓存实现。
而heap中需要存储大量的对象,需要更大的容量,它大部分使用主存来实现。

8个原子操作

JMM定义了8个操作来完成主内存和工作内存的交互操作

指令用途作用于
lock加锁把主内存中的变量标志为一条线程独占的状态主内存
read读取将一个变量的值从主内存传输到工作内存中主内存
load加载把read得到的值加载到工作内存的变量副本中工作内存
use使用把工作内存中变量的值传递给执行引擎工作内存
assign赋值把从执行引擎接收到的值赋值给工作内存的变量工作内存
store存储把工作内存中变量的值传送回主内存中工作内存
write写入把store得到的值放入主内存的变量中主内存
unlock解锁把主内存中处于锁定状态的变量释放出来主内存
并发三个要素

原子性:
一个操作中CPU 不可以在中途暂停然后再调度,要么不执行,要么就执行完成。

可见性:
多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改后的值。

有序性:
程序执行的顺序按照代码的先后顺序执行,不能重排,导致程序出现不一致的结果。

Java提供了一些关键字:Java同步关键字和类

参考资料

JMM

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

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

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