jmm内存模型

发布于 2020-05-11  390 次阅读


CPU模型图

cpu结构模型

http://wql.luoqin.ltd/wp-content/uploads/2020/05/cpu.png

JMM内存模型

JMM内存模型借助于CUP结构产生在java中它只是个虚拟的结构模型实际作用于JVM中(JVM的堆相当于JMM的共享内存,栈相当于JMM的工作内存),在操作系统中程序的运行先通过IO加载进内存,内存通过IO加载进缓存,由于CPU的HZ速率差,CPU引进了多级缓存机制,把CPU未来要运算的数据提前加载进缓存提高效率和性能(数据传输效率:CPU>寄存器>缓存>内存),缓存把数据载入CPU,CPU分配时间碎片运算执行,分配的时间碎片是单独的空间由线程执行

JMM借助CPU的并发机制

JMM1.1

http://wql.luoqin.ltd/wp-content/uploads/2020/05/JMM1.png

JMM趴大原则性操作

主内存共享变量,工作内存拷贝主内存的副本,进行增删改,再由工作内存载入主内存对主内存进行修改,进行多线程并发,但在这一过程中需要一系列的原子性操作

http://wql.luoqin.ltd/wp-content/uploads/2020/05/JMM2.png

lock(锁定):当一个线程要都取值并要运算修改时为保证数据的原子性会先对主内存锁定,其他线程只能等待

read(读取):将主内存的数据工作内存

load(载入):将工作内存的值加载进工作内存副本并保存

use(使用):把工作内存的数据交给执行引擎计算

assign(赋值):把执行引擎的值重新赋值给工作内存的变量

store(存储):把工作内存的数据传给主内存,方便write操作

write(写入):把新的数据重新写入主内存

unlock(解锁):线程操作完毕,对锁进行释放,其他线程可以对主内存进行操作

JMM的三大特性

1,原子性:数据的修改要么成功要么失败

2,可见性:主内存的修改的其他可以被通知

3,有序性:指令的重排的,jvm的一个优化策略(代码的执行顺序错乱但单线程下jvm没有优化,有锁的情况下执行是串行的没有重排)

原子性的实现:lock的锁,锁主线保证了原则性

可见性的实现:MESI(缓存一致性协议)

 


路漫漫其修远兮,吾将上下而求索