深入理解Java内存模型 ch7 总结

1.处理器内存模型

根据对不同类型读/写操作组合的执行顺序的放松,可以把常见处理器的内存模型划分为下面几种类型:

  • 1.放松程序中写-读操作的顺序,由此产生了total store ordering内存模型内存模型(简称为TSO)。
  • 2.在前面1的基础上,继续放松程序中写-写操作的顺序,由此产生了partial store order内存模型(简称为PSO)。
  • 3.在前面1和2的基础上,继续放松程序中读-写和读-读操作的顺序,由此产生了relaxed memory order内存模型(简称为RMO)和PowerPC内存模型。

读写操作的放松是以操作间不存在数据依赖性为前提。


深入理解Java内存模型 ch7 总结_第1张图片

所有处理器内存模型都允许写-读重排序,原因在第一章以说明过:它们都使用了写缓存区,可能导致-读操作重排序。同时,我们可以看到这些处理器内存模型都允许更早读到当前处理器的写,原因同样是因为写缓存区:由于写缓存区仅对当前处理器可见,这个特性导致当前处理可以比其他处理器先看到临时保存在自己的写缓存区中的写。

深入理解Java内存模型 ch7 总结_第2张图片

JMM屏蔽了不同处理器内存模型的差异,它在不同的处理器平台之上为 java程序员呈现了一个致的内存模型 。

2.JMM、处理器内存模型与顺序一致性内存模型之间的关系

  • JMM是一个语言级的内存模型
    处理器内存模型是硬件级的内存模型
    顺序一致性内存模型是一个理论参考模型


    深入理解Java内存模型 ch7 总结_第3张图片

3.JMM的设计

设计JMM时,需要考虑的两个关键因素:

  • 程序员对内存模型的使用。程序员希望基于一个强内存模型。
  • 编译器和处理器对内存模型的实现。编译器和处理器希望实现一个弱内存模型。

JMM对于不改变程序执行结果的重排序不做要求,可以重排序。
例如,如果锁只会被单线程访问,就会被消除。同样,volatile变量只被单线程访问,就会当作一个普通变量来对待。


深入理解Java内存模型 ch7 总结_第4张图片

4.JMM的内存可见性保证

三类程序:

  • 单线程程序
  • 正确同步的多线程程序。正确同步的多线程程序的执行将具有顺序一致性。
  • 未同步/未正确同步的多线程程序。JMM为它们提供了最小安全性保障:线程执行时读取到的值,要么是之前某个线程写入的值,要么是默认值(0, null, false)


    深入理解Java内存模型 ch7 总结_第5张图片

你可能感兴趣的:(深入理解Java内存模型 ch7 总结)