美文网首页多线程专家
深入理解Java内存模型 ch7 总结

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

作者: 王侦 | 来源:发表于2018-12-13 19:54 被阅读117次

    1.处理器内存模型

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

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

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



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


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

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

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


    3.JMM的设计

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

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

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


    4.JMM的内存可见性保证

    三类程序:

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


    相关文章

      网友评论

        本文标题:深入理解Java内存模型 ch7 总结

        本文链接:https://www.haomeiwen.com/subject/fvjehqtx.html