Java 内存模型(JMM)概览
核心定义与作用
Java 内存模型(Java Memory Model,简称 JMM)是 Java 虚拟机规范中定义的一种抽象概念。它规定了多线程环境下,线程如何与内存进行交互。
简单来说,JMM 的核心作用有三点:
- 定义程序中各个变量的访问规则
- 确保多线程程序的可见性、有序性和原子性
- 屏蔽不同硬件平台和操作系统的内存访问差异
JVM 与 JMM 的区别
提到 JMM,很多人容易把它和 JVM 搞混。我们用一张表来直观对比一下它们的区别:
| JVM 内存结构 | Java 内存模型 | |
| 核心关注点 | 数据存储的物理/逻辑分区 | 线程与内存的交互规则 |
| 内容 | 堆、栈、方法区等内存区域 | 主内存、工作内存抽象概念 |
| 目的 | 内存分配与管理 | 多线程内存可见性控制 |
JMM 核心概念
主内存和工作内存
- 主内存:所有线程共享的内存区域,存储所有实例字段、静态字段和数组元素。
- 工作内存:每个线程私有的内存空间,存储线程使用变量的副本。
当某个线程需要使用到内存中的变量时,它会先从主内存中复制一份该变量的副本到自己的工作内存当中,使用完后再将该变量写入主内存的共享内存中。

内存间的交互操作
JMM 定义了以下八种操作来实现内存间的交互:
- lock/unlock:作用于主内存,标识变量为线程独占状态。
- read/load:从主内存读取变量到工作内存。
- use/assign:工作内存中使用和赋值操作。
- store/write:将工作内存变量写回主内存。
内存三大特性
原子性
原子性指一个操作或一系列操作要么全部执行成功,要么全部不执行,不会出现执行到一半的状态。
// 原子操作示例
int x = 10; // 原子的:一次性赋值
boolean flag = true; // 原子的
// 非原子操作示例
int i ;
i++;


