美文网首页
JVM-004-内存屏障

JVM-004-内存屏障

作者: Docker_Compose | 来源:发表于2020-11-12 00:34 被阅读0次

cpu层级保证有序性

 cpu指令乱序执行虽然提升了效率,但是在某种特定的情况,我们并不需要指令乱序执行。为了保障有序性,cpu层级提供了三条汇编的指令,也就是内存屏障。
 这三条汇编指令分别是sfence、lfence、mfence。除此之外,还有lock指令。

指令 作用
sfence,即save 写/写。增加该汇编指令后,写操作1必须在写操作2执行前完成。
lfence,即load 读/读。
mfence,即modify/mix 读写/读写
lock 拥有该指令的读写后,任一读写操作都不能被其他cpu修改

JVM层级保证有序性(x86)

 JVM层级的内存屏障只是一种规范,具体需要根据硬件来实现。
 JVM层级提供了四种内存屏障,LoadLoad屏障、StoreStore屏障、LoadStore屏障、StoreLoad屏障。

屏障 作用
LoadLoad屏障 读/读
StoreStore屏障 写/写
LoadStore屏障 读/写
StoreLoad屏障 写/读

volatile

  volatile在字节码、JVM层面、OS和硬件层面的实现。

层级 实现
字节码 增加ACC_VOLATILE 标记
JVM StoreStoreBarrier volatile 写操作 StoreLoadBarrier ;LoadLoadBarrier volatile 读操作 LoadStoreBarrier
OS和硬件层面 windows 加 lock

synchronized

  synchronized在字节码、JVM层面、OS和硬件层面的实现。

层级 实现
字节码 monitorenter1+monitorexeit2
JVM C++调用OS提供的同步机制
OS和硬件层面 (x86)lock指令 lock cmpxchg xxxx

相关文章

  • JVM-004-内存屏障

    cpu层级保证有序性  cpu指令乱序执行虽然提升了效率,但是在某种特定的情况,我们并不需要指令乱序执行。为了保障...

  • leveldb源码学习--skiplist

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

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

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

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

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

  • 什么是内存屏障?

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

  • 内存屏障

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

  • 内存屏障

  • 内存屏障

    内存屏障(Memory barrier) 为什么会有内存屏障 每个CPU都会有自己的缓存(有的甚至L1,L2,L3...

  • 内存屏障

    内存屏障的作用 保证数据的可见性我们知道,内存中的数据除了在内存中的副本,还有可能在各个核的CPU中,当某个核修改...

  • 内存屏障

    我们看到这个词语的时候觉得很高端,但是本质很简单,就是指定==事件先后执行的顺序== 一、意义 想要了解内存屏障,...

网友评论

      本文标题:JVM-004-内存屏障

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