引言

内存模型结构的抽象分为两个层次:

  • 多核CPU与内存之间
  • Java多线程与主存之间

多核CPU与内存之间

因为CPU的运行速度与内存之间的存取速度不成正比,所以,引入了多级缓存概念,相应的也引出了缓存读取不一致问题,当然缓存一致性协议解决了这个问题(本文不深入讨论)。
结构抽象如图:

多核处理器和内存交互.jpg

Java多线程与主存之间

JMM规定了所有的变量都存储在主内存(Main Memory)中。

每个线程有自己的工作内存(Working Memory),线程的工作内存中保存了该线程使用到的变量的主内存的副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量(volatile变量仍然有工作内存的拷贝,但是由于它特殊的操作顺序性规定,所以看起来如同直接在主内存中读写访问一般)。不同的线程之间也无法直接访问对方工作内存中的变量,线程之间值的传递都需要通过主内存来完成。
如图:
JAVA内存模型抽象.jpg

JAVA内存模型抽象示意图.png