内存模型是用来描述编程语言在支持多线程编程中,对共享内存访问的顺序。
Happens-Before 的规则:
Happens-Before 模型强调的是同步动作的先后关系,对于非同步动作,就没有任何的限制了。
JMM 是一种理论上的内存模型,并不是真实存在的。它是以具体的 CPU 的内存模型为基础的。
这个表格描述了连续的两个读写动作,JVM 应该如何处理。表格的最左列代表了第一个动作,第一行代表了第二个动作。表格中的内容使用了 LoadLoad、LoadStore、StoreStore、StoreLoad 四种内存屏障,分别表示第一个动作和第二个动作之间应该插入什么类型的内存屏障。
内存屏障与原子操作是两个不同的概念。内存屏障强调的是可见性,而原子操作则是强调多个步骤要么都完成,要么都不做。也就是说一个操作中的多个步骤是不能存在有些完成了,有些没完成的状态的。
此文章为7月Day18学习笔记,内容来源于极客时间《编程高手必学的内存知识》