IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【JVM】细谈Java内存模型JMM -> 正文阅读

[Java知识库]【JVM】细谈Java内存模型JMM

JMM是Java内存模型,与JVM内存模型是两回事。
JMM的主要目标是定义程序中变量的访问规则(Happens-Before)。
在底层处理器内存模型的基础之上,定义自己的多线程

JMM规定: 要想保证B操作能够看到A操作的结果(无论它们是否在同一个线程),那么A和B之间必须满足Happens-Before关系.

  • 所有的变量都存储在主内存中----->共享。
  • 每条线程还有自己的工作内存(相当于高速缓存,有利于提高访问速度)。
  • 工作内存中保存的是主内存中变量的副本(copy),线程对变量的读写操作是在自己的工作内存中进行,而不是直接读写主内存中的变量。

在这里插入图片描述
不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成。
在这里插入图片描述

Java内存模型的三大特性:原子性、可见性、有序性

多线程进行数据操作时,将可能发生线程安全问题,因此JMM需要提供原子性、可见性、有序性的保证。
在这里插入图片描述
在这里插入图片描述

volatile关键字

volatile关键字的特性是Java内存模型规定的
1.保证被此关键字修饰的变量对所有线程的可见性
2.禁止指令重排序
编译器重排序–>JVM重排序–>内存重排序

内存间(主内存和工作内存)的交互操作

变量从主内存读取到工作内存,然后同步回工作内存的细节,这就是主内存与工作内存之间的交互协议。
Java内存模型定义了以下8种操作来完成,它们都是原子操作(除了对long和double类型的变量)。

作用主内存:

  • lock(锁定)
    作用于主内存中的变量,它将一个变量标志为一个线程独占的状态。
  • unlock(解锁)
    作用于主内存中的变量,解除变量的锁定状态,被解除锁定状态的变量才能被其他线程锁定。
  • read(读取)
    作用于主内存中的变量,它把一个变量的值从主内存中传递到工作内存,以便进行下一步的load操作。
  • write(写入)
    作用于主内存中的变量,它把store传递过来的值放到主内存的变量中。

作用工作内存:

  • load(载入)
    作用于工作内存中的变量,它把read操作传递来的变量值放到工作内存中的变量副本中。
  • use(使用)
    作用于工作内存中的变量,这个操作把变量副本中的值传递给执行引擎。当执行需要使用到变量值的字节码指令的时候就会执行这个操作。
  • assign(赋值)
    作用于工作内存中的变量,接收执行引擎传递过来的值,将其赋给工作内存中的变量。当执行赋值的字节码指令的时候就会执行这个操作。
  • store(存储)
    作用于工作内存中的变量,它把工作内存中的值传递到主内存中来,以便进行下一步write操作。

在将变量从主内存读取到工作内存中,必须顺序执行read、load。读取载入
要将变量从工作内存同步回主内存中,必须顺序执行store、write。存储写入

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:17:51  更:2022-03-10 22:20:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:57:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码