Java内存模型概述(JMM)

处理器内存模型

顺序一致性内存模式是一个理论的参考模式。JMM和处理器内存模型都是参照顺序一致性内存模型来设计的。
在设计JMM和处理器内存模型的时候都会做一些放松。因为如果按照顺序一致性内存模型来设计JMM和处理器内存模型的话,许多性能的优化就不可以使用。
针对不同类型的读写操作的执行顺序的放松,处理器内存模型可以分为以下几种。

  1. 放松程序中的写-读操作————Total Store Ordering内存模型(TSO)
  2. 在1的基础上继续放松写-写操作————Partial Store Order内存模型(PSO)
  3. 在2的基础上继续放松读-写 和 读-读操作————Relaxed Memory Order(RMO)和PowerPC内存模型

这里对处理器的读-写操作的放松,是基于两个操作之间没有数据依赖性为前提的(处理器要遵循as-if-serial语义)

内存模型名称Store-LoadSotre-StoreLoad-Load 和 Load-Sotre可以更早的读到其他处理器的写可以跟早的读到当前处理器的写(写缓冲)
TSOYY
PSOYYY
RMOYYYY
PowerPCYYYYY
                                                                          处理内存特征表

因为常见的处理器的内存模型比JMM要弱,所以JMM在各个平台上都进行了处理,通过插入不同的内存屏障(限制处理器的重排序)来达到统一的内存模型。
JMM通过内存屏障屏蔽了不同处理器的内存模型的差异,给Java程序员提供了一个一致的内存模型。

语言级内存模型和处理器级内存模型

处理机内存模型的性能高于语言级内存模型,但是编程的难易方面语言级内存模型高于处理器级内存模型。
一句话:性能越好,易编程性越差。常见的几种内存模性,PowerPC性能最高(易编程性最差)。顺序一致性内存模型易编程性最好(性能最差)

JMM的内存可见性保证

单线程程序:单线程程序不会出现内存可见性问题。 编译器、runtime、处理器会共同保证该执行结果和顺序一致性内存模型的处理结果一致。
正确同步的多线程程序:正确同步的多线程程序会具有顺序一致性(与顺序一致性内存模型的结果相同) 通过JMM限制处理器和编译器的重排序。
未同步/为正确同步的多线程程序:JMM提供最小的安全保障,读到的值要么是之前程序写入的值,要么是默认值(0、null、false)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值