Day 22 JMM 与三大特性

2022-04-02  本文已影响0人  小周爱吃瓜

JMM
java memory model.

原子性,可见性,有序性。

cpu会存在高速缓冲区,分配于每个线程内部的私有区域,但是都会写回到主内存中。

原子性:

Screen Shot 2022-04-02 at 10.16.58 PM.png

一个i++操作是分好几个步骤的,会先拷贝到线程内部,然后运算,写回到主存中。

可加性:

volative,内存屏障,lock,final修饰域都能保证其可见性。

有序性:
cpu为了高速执行,会多线程的去执行这些指令,会保证最终结果的一致性.
指令重排序不会影响单个线程的执行,但是会影响到并发执行的正确性。

Screen Shot 2022-04-02 at 10.21.21 PM.png

比如dcl,A,B并发执行,A将instance赋值 ,但是B还是拿到空的Instance,又会去赋值.

Screen Shot 2022-04-02 at 10.19.38 PM.png

JMM模型:

Screen Shot 2022-04-02 at 10.24.18 PM.png

java p -c 可以看到Lock前缀指令。
前缀指令执行期间会锁住总线,防止指令重排序,确保读在写之后,刷新store buffer会导致cache副本失效.

JVM层面:

以上是基于理论的:
那么实际 是硬件层面做了支持.

内存屏障有2个能力

  1. 防止指令重排序
  2. 刷新处理器缓存
上一篇 下一篇

猜你喜欢

热点阅读