JMM内存模型

JMM内存模型

说到底JMM其实是定义了线程和主存之间的关系。每个线程都有一个本地内存,存储了主存中共享变量、资源的副本。JMM控制了多个线程之间的通讯。通讯同步的约定:

  • 线程解锁前,必须把共享变量立刻刷回主存。
  • 线程加锁前,必须读取主存中的最新值到工作内存中!
  • 加锁和解锁是同一把锁

JMM作为一个语言级的内存模型,在不同的编译器和处理器上,通过禁止特定类型的编译器和处理器重排序,提供一致的内存可见性保证。

  • 对于编译器重排序:JMM会禁止特定类型的编译器重排序
  • 对于处理器重排序:JMM会要求JVM在生成指令序列的时候,插入特定类型的内存屏障(Memory Barriers)来禁止处理器重排序

as-if-serial语义

​ 不管编译器和处理器为了提供并行度做怎样的重排序,单线程程序的执行结果不能被改变。

Happens-before

​ 如果一个操作happens-before另一个操作,那么第一个操作的执行结果对第二个操作可见,但是第一个操作的执行顺序不一定排在第二个之前

参考:简单聊聊JMM/说说对JMM的了解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值