Java内存屏障

作者: dduang | 来源:发表于2018-04-02 15:17 被阅读41次

背景

Java内存模型定义了8种原子操作:

  1. lock:锁住某个主存地址,为一个线程占用
  2. unlock:释放某个主存地址,允许其他线程访问该地址的数据
  3. read:将主存的值读取到工作内存
  4. Load:将read读取的值保存到工作内存的变量副本
  5. use:将值传递给线程的代码执行引擎
  6. assign:将执行引擎的处理返回的值重新赋值给变量副本
  7. Store:将变量副本的值刷新到主存
  8. write:将store存储的值写入到主内存的共享变量中

说明:

  1. 工作内存:可以理解成CPU的local memory,也就是CPU的寄存器
  2. 变量副本:可以理解成JVM stack(JVM 寄存器)
    所以= = store和write的区别是什么= =

指令

  • LoadLoad 屏障
    Load1/LoadLoad/Load2,保证从主存读取变量1的操作在从主存读取变量2及其后续的变量之前完成,不会发生变量2及其后续的变量的读取语句被重排序到变量1语句之前,那LoadLoad屏障之后的写操作会被重排序到变量1的读取之前吗?

  • LoadStore屏障
    Load1/LoadStore/Store2,变量2及其后续的变量的值从工作内存被刷新到主存之前,保证从主存中将变量1的值先拷贝到工作内存中。

  • StoreStore屏障
    Store1/StoreStore/Store2,变量2及其后续变量的值被刷新到主存之前,保证变量1的值被刷新到主存中。

  • StoreLoad屏障:
    Store1/StoreLoad/Load2,从主存拷贝变量2及其后续变量的值到工作内存之前,保证变量1的值被刷新到主存中。
    很多资料都说,该屏障是最强屏障,具有前面3种屏障的功效,但是我不理解= =有盆友知道的话,请不吝赐教~~~

其他

内存屏障影响的是同一个线程内的代码的执行顺序。

相关文章

  • 聊聊java内存模型

    本文目录 Java内存模型 重排序 内存屏障 volatitle的内存语义 final的内存语义 一、Java内存...

  • Java内存屏障

    背景 Java内存模型定义了8种原子操作: lock:锁住某个主存地址,为一个线程占用 unlock:释放某个主存...

  • Java 内存屏障 Memory Barrier 及 volat

    Java 内存模型如下图所示: 内存屏障 Memory Barrier 处于性能优化的目的,编译器和 CPU 可能...

  • 16. 内存屏障

    Java虚拟机底层实际上是借助内存屏障来实现刷新处理器缓存和冲刷处理器缓存这两个动作的。 内存屏障(Memory ...

  • leveldb源码学习--skiplist

    Skiplist原理 内存屏障 内存屏障,也称内存栅栏,内存栅障,屏障指令等,是一类同步屏障指令,是CPU或编译器...

  • Java的final关键字的内存语义

    概念介绍: 1.内存屏障: 内存屏障(Memory Barier,或者有时叫做内存栅栏,Memory Fence)...

  • 内存屏障在CPU、JVM、JDK中的实现

    前言 内存屏障(英语:Memory barrier),也称内存栅栏,内存栅障,屏障指令等,是一类同步屏障指令,它使...

  • 什么是内存屏障?

    内存屏障:是一种CPU质量,用于控制特定条件下的重排序和内存可见性问题。又称:内存栅栏 内存屏障作用: 阻止屏障两...

  • 内存屏障

    内存屏障(Memory Barrier,或有时叫做 内存栅栏,Memory Fence)是一种CPU指令,用于控制...

  • 内存屏障

网友评论

    本文标题:Java内存屏障

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