JMM是什么?
1 个回答
人一旦不害怕失去,态度就会变得随意,随你意,你随意。高澜JMM(Java Memory Model,Java 内存模型)是 **Java 虚拟机规范** 中定义的一组规则,用来约束 **Java 程序在多线程环境下对内存的访问方式**,确保并发程序在不同硬件和操作系统上的运行结果一致。 ## 1. 为什么需要 JMM 不同 CPU、编译器、JIT 优化都会导致**指令重排**、**缓存可见性问题**。 JMM 统一规定了: * **变量在主内存和工作内存之间如何交互** * **什么情况下一个线程的修改对另一个线程可见** * **哪些操作不能被重排序** ## 2. 内存结构模型 在 JMM 中,内存被分成: * **主内存(Main Memory)**:存储所有共享变量(实例字段、静态字段、数组元素) * **工作内存(Working Memory)**:每个线程私有,保存主内存变量的副本 **运行过程**: 1. 线程读取变量 → 从主内存拷贝到工作内存 2. 修改变量 → 先改工作内存,再刷新回主内存 3. 线程之间变量值的传递必须经过主内存 ## 3. JMM 定义的原子操作 JMM 规定了主内存与工作内存之间的 **8 种原子操作**: * **lock / unlock**(锁定/解锁主内存变量) * **read / write**(读取/写入主内存变量) * **load / store**(从主内存传到工作内存 / 从工作内存传到主内存) * **assign**(赋值操作) ## 4. JMM 的三大核心特性 1. **原子性(Atomicity)** * 单个变量的读/写是原子操作(`volatile` 保证可见性但不保证复合操作原子性) 2. **可见性(Visibility)** * 一个线程修改变量,其他线程立即可见(`volatile`、锁、`final` 保证) 3. **有序性(Ordering)** * 禁止特定的指令重排(`volatile` 和 `synchronized` 有内存屏障) ## 5. 关键实现手段 * **`volatile`**:保证可见性 + 禁止重排序(部分有序性) * **`synchronized`** / **`Lock`**:保证原子性、可见性、有序性 * **`final`**:构造完成前禁止字段重排序发布于 2025-08-13 06:57 •IP属地 黑龙江举报评论收藏
公众号进入网站体验更佳

