问题描述

volatile关键字用过吧。聊聊你对volatile关键字的认识。

知识点整理

  1. 在系统底层如何禁止指令重排序

通过内存屏障,提供sfence、mfence、lfence等系统源语

  1. 对于Java中volatile也是通过内存屏障防止指令重排序
    • Java代码层面:对变量添加volatile关键字
    • 字节码层面:在字段上标记 ACC_VOLATILE
    • JVM层面:添加内存屏障
    • 具体实现(具体如何添加内存屏障)Hotspot实现:通过C++代码
  2. 内存屏障有哪些些?

image.png

  • 解释一个LoadLoad:就是第一读取命令Load对完后才对第二进行读