Volatile可见性与指令重排序机制.pdfVIP

  • 2
  • 0
  • 约2.27千字
  • 约 6页
  • 2026-05-22 发布于北京
  • 举报

volatile的可见性是如何实现的,以及如何指令重排序

《深入理解JAVA虚拟机》中有如下描述:

“观察加入volatile关键字和没有加入volatile关键字时所生成的汇编代码发现,加入volatile关键字时,

会多出一个lock前缀指令”

lock前缀指令实际上相当于一个内存屏障(也称内存栅栏),内存屏障会3个功能:

1.它确保指令重排序时不会把其后面的指令排到内存屏障之前的位置,也不会把前面的指令排到内存

屏障的后面;即在执行到内存屏障这句指令时,在它前面的操作已经全部完成;2.它会强制将对缓存

的修改操作立即写入主存;3.如果是写操作,它会导致其他CPU中对应的缓存行无效。

所以可见性和指令重排序如下:

可见性:

volatile的功能就是被修饰的变量在被修改后可以立即同步到主内存,被修饰的变量在每次使用之

前都从主内存刷新。本质也是通过内存屏障来实现可见性。写内存屏障(StoreMemoryBarrier)可

以促使处理器将当前storebuffer(缓存)的值写回主存。读内存屏障(LoadMemory

Barrier)可以促使处理器处理invalidatequeu

文档评论(0)

1亿VIP精品文档

相关文档