最全JMM详解——Java内存模型抽象|八种同步操作|操作规则!!!
Posted 蛋挞学姐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最全JMM详解——Java内存模型抽象|八种同步操作|操作规则!!!相关的知识,希望对你有一定的参考价值。
JMM
调用栈&本地变量在线程栈上
对象整体在堆上(包括其本地变量,不论类型),栈有其引用即可访问,
- 线程调用同一个对象时,是访问该对象的私有拷贝
每个CPU有自己的高速缓存
- 高速缓存存在意义:解决cpu执行速度快,主存读取慢的速度不匹配问题
和硬件内存架构关联
硬件内存架构不区分栈和堆,大部分栈和堆出现在主存,小部分高速缓存,更小部分寄存器
JMM抽象结构图
线程的本地内存是一个抽象概念,涵盖缓存、写缓冲区、寄存器等硬件部分
线程的工作缓存是线程所有的寄存器和高速缓存的朝向描述
- 不同内存通信必须经过主存
JVM:内存的物理划分
JAVA内存模型的八种同步操作
Lock](https://shimo.im/docs/9GTP6XrJg9J88cJD/)
把主内存中一个变量上锁
把主内存中一个上锁的变量释放
把一个变量的值从主存输送给线程的工作内存
把read得到的变量值放到工作内存的副本中
把工作内存的变量传送给执行引擎(读取变量值操作)
把执行引擎中的值赋给工作内存的变量中(变量赋值操作)
把工作内存中的变量值传递到主存中
把store得到的变量值写入主存中
规则
- read和load,write和store必须成对出现,顺序执行(但不用连续执行)
- assign操作不允许丢弃,即,工作内存中变量改变必须同步给主内存
- use前必须有load,store前必须有assign
- 同一时间一个变量只能被一个线程lock,但该线程可对其lock多次,lock多少次,必须对应unlock对应次数才能解锁
- 如果一个线程lock了某个变量,改变量在工作内存中的值会被清空,使用前必须
- unlock前必须要把该变量写回主存
最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。
可以的话请给我一个三连支持一下我哟???
以上是关于最全JMM详解——Java内存模型抽象|八种同步操作|操作规则!!!的主要内容,如果未能解决你的问题,请参考以下文章
死磕 java同步系列之JMM(Java Memory Model)