1.处理器的内存模型
顺序一致性内存模型是一个理论参考模型,JMM和处理器内存模型在设计时通常会以顺 序一致性内存模型为参照。在设计时,JMM和处理器内存模型会对顺序一致性模型做一些放 松,因为如果完全按照顺序一致性模型来实现处理器和JMM,那么很多的处理器和编译器优 化都要被禁止,这对执行性能将会有很大的影响。
JMM为程序员屏蔽了不同处理器的差异,
2 各种内存模型之间的关系
JMM是一个语言级的内存模型,处理器内存模型是硬件级的内存模型,顺序一致性内存 模型是一个理论参考模型。下面是语言内存模型、处理器内存模型和顺序一致性内存模型的 强弱对比示意图,如图3-49所示。
从图中可以看出:常见的4种处理器内存模型比常用的3中语言内存模型要弱,处理器内存 模型和语言内存模型都比顺序一致性内存模型要弱。同处理器内存模型一样,越是追求执行 性能的语言,内存模型设计得会越弱。
按程序类型,Java程序的内存可见性保证可以分为下列3类。
·单线程程序。单线程程序不会出现内存可见性问题。编译器、runtime和处理器会共同确 保单线程程序的执行结果与该程序在顺序一致性模型中的执行结果相同。
·正确同步的多线程程序。正确同步的多线程程序的执行将具有顺序一致性(程序的执行 结果与该程序在顺序一致性内存模型中的执行结果相同)。这是JMM关注的重点,JMM通过限 制编译器和处理器的重排序来为程序员提供内存可见性保证。
·未同步/未正确同步的多线程程序。JMM为它们提供了最小安全性保障:线程执行时读取 到的值,要么是之前某个线程写入的值,要么是默认值(0、null、false)。