当前位置: 首页 > news >正文

JMM中的内存屏障

引言

在多线程编程中,内存可见性和指令重排序是两个关键问题,它们直接影响程序的正确性和性能。Java内存模型(JMM, Java Memory Model)通过定义一套规范,为开发者提供了在多线程环境下操作共享内存的规则。其中,内存屏障(Memory Barrier)是JMM的核心机制之一,它通过限制指令重排序和确保内存可见性,帮助开发者编写出线程安全的代码。

1. JMM层面的内存屏障

  • LoadLoad屏障: 对于这样的语句Load1; LoadLoad; Load2,在Load2及后续读取操作要读取的数据被访问前,保证Load1要读取的数据被读取完毕。
  • StoreStore屏障:对于这样的语句Store1; StoreStore; Store2,在Store2及后续写入操作执行前,保证Store1的写入操作对其它处理器可见。
  • LoadStore屏障:对于这样的语句Load1; LoadStore; Store2,在Store2及后续写入操作执行前,保证Load1要读取的数据被读取完毕。
  • StoreLoad屏障: 对于这样的语句Store1; StoreLoad; Load2,在Load2及后续所有读取操作执行前,保证Store1的写入对所有处理器可见。

JVM内存屏障依赖于底层CPU的屏障指令来实现,让我们的程序员不需要关心到系统的底层,只需要关心他们的自己的程序逻辑开发和如何使用这套规范即可,而封装这套解决方案的模型就是我们常说的Java内存模型JMM(Java Memory Model)。

1.1 JVM内存屏障的作用

  • 阻止指令重排序:在插入内存屏障指令后,不管前面与后面任何指令,都不能与内存屏障指令进行重排,保证前后的指令按顺序执行。
  • 全局可见:插入的内存屏障,保证了其对变量的修改结果会立即写入主内存,同时通过缓存一致性协议和总线嗅探机制,使其它CPU核心缓存该变量对应的缓存行无效,迫使其它线程下次访问该变量时,只能从主内存获取,即保证了可见性 ,解决了普通读写的延迟问题。

2. CPU读写屏障

写屏障

  • 确保对屏障之前的所有写操作的结果在继续执行屏障之后的任何指令前都是可见的。(防止指令重排)
  • 在内存屏障语句之后的所有针对CPU缓存的写操作开始之前,必须先把Store Buffer(写缓冲区)中的数据全部刷新到CPU缓存中。(保证可见性)

读屏障

  • 确保对屏障之前的所有读操作的结果在继续执行屏障之后的任何指令前都是可见的。(防止指令重排)
  • 在内存屏障语句之后的所有针对CPU缓存的读操作开始之前,必须先把Invalidate Queue(失效队列)中的数据全部应用到CPU缓存中。(保证可见性)

全屏障

  • 是读屏障和写屏障的组合,确保屏障之前的所有操作在屏障之后的所有操作之前完成,并保证可见性。

感谢您的阅读!如果文章中有任何问题或不足之处,欢迎及时指出,您的反馈将帮助我不断改进与完善。期待与您共同探讨技术,共同进步!

http://www.xdnf.cn/news/209809.html

相关文章:

  • 【电子战数字孪生系统】新一代雷达目标与干扰模拟器技术白皮书
  • 数字中国浪潮下:Coremail AI赋能邮件办公,筑牢安全防线引领转型
  • Dia-1.6B 在 Windows 系统下的成功部署及多人情景对话克隆实践
  • SSR vs SSG:前端渲染模式终极对决(附 Next.js/Nuxt.js 实战案例)
  • Java中的接口和抽象类
  • JSON-RPC 2.0 规范中文版——无状态轻量级远程过程调用协议
  • 无锡哲讯科技:引领企业数字化转型的SAP实施专家
  • 基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(四)
  • 基于 Windows I/O 完成端口(IOCP)的多线程任务队列系统小case
  • 关于插值和拟合(数学建模实验课)
  • 在 VMware 虚拟机中安装 Windows7
  • 【Redis】缓存|缓存的更新策略|内存淘汰策略|缓存预热、缓存穿透、缓存雪崩和缓存击穿
  • 系统的环境变量
  • 编程中如何与AI交互-结构化输入和理解确认机制
  • 【dify—3】拉取镜像、本地访问dify
  • 如何搭建spark yarn 模式的集群集群
  • 第1阶段-前5天-考试题及答案
  • (开源)视频画面增强模型:Ev-DeblurVSR (可以解决视频画面不清晰的问题)
  • C++算法(17):reverse函数用法详解,头文件<algorithm>与实战示例
  • CSS的三大特性:层叠、继承与优先级
  • UI-TARS论文解读 并提供镜像
  • 深入理解Spring AI框架的核心概念
  • HarmonyOS ArkUI交互事件与手势处理全解析:从基础到高级实践
  • 阿里Qwen3 8款模型全面开源,免费商用,成本仅为 DeepSeek-R1 的三分之一
  • 深入理解 Linux 权限管理:从基础到进阶
  • Agent开源工具:mcp快速接入,mcp-use上手指南
  • 23G显存可以跑多大尺寸的Qwen3?
  • 第十六届蓝桥杯 2025 C/C++组 旗帜
  • 常见的 CSS 知识点整理
  • 20250429在Ubuntu 20.04.6下安装VMware Workstation16