最全JMM详解——Java内存模型抽象|八种同步操作|操作规则!!!

Posted 蛋挞学姐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最全JMM详解——Java内存模型抽象|八种同步操作|操作规则!!!相关的知识,希望对你有一定的参考价值。

JMM

调用栈&本地变量在线程栈上

对象整体在堆上(包括其本地变量,不论类型),栈有其引用即可访问,

  • 线程调用同一个对象时,是访问该对象的私有拷贝

每个CPU有自己的高速缓存

  • 高速缓存存在意义:解决cpu执行速度快,主存读取慢的速度不匹配问题

和硬件内存架构关联


硬件内存架构不区分栈和堆,大部分栈和堆出现在主存,小部分高速缓存,更小部分寄存器

JMM抽象结构图

线程的本地内存是一个抽象概念,涵盖缓存、写缓冲区、寄存器等硬件部分

线程的工作缓存是线程所有的寄存器和高速缓存的朝向描述

  • 不同内存通信必须经过主存

JVM:内存的物理划分

JAVA内存模型的八种同步操作

Lock](https://shimo.im/docs/9GTP6XrJg9J88cJD/)

​ 把主内存中一个变量上锁

unlock

​ 把主内存中一个上锁的变量释放

Read

​ 把一个变量的值从主存输送给线程的工作内存

load

​ 把read得到的变量值放到工作内存的副本中

Use

​ 把工作内存的变量传送给执行引擎(读取变量值操作)

Assign

​ 把执行引擎中的值赋给工作内存的变量中(变量赋值操作)

Store

​ 把工作内存中的变量值传递到主存中

Write

​ 把store得到的变量值写入主存中

规则

  • read和load,write和store必须成对出现,顺序执行(但不用连续执行)
  • assign操作不允许丢弃,即,工作内存中变量改变必须同步给主内存
  • use前必须有load,store前必须有assign
  • 同一时间一个变量只能被一个线程lock,但该线程可对其lock多次,lock多少次,必须对应unlock对应次数才能解锁
  • 如果一个线程lock了某个变量,改变量在工作内存中的值会被清空,使用前必须
  • unlock前必须要把该变量写回主存

最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

可以的话请给我一个三连支持一下我哟???

以上是关于最全JMM详解——Java内存模型抽象|八种同步操作|操作规则!!!的主要内容,如果未能解决你的问题,请参考以下文章

java面试-Java内存模型(JMM)

Java内存模型(JMM)详解

死磕 java同步系列之JMM(Java Memory Model)

二:并发编程之JMM&synchronized&volatile详解

Java 内存模型 JMM 详解!

java并发知识合集(前置知识——java内存模型)