JVM 内存模型与 Java 线程内存模型的区别¶
一、JVM 内存模型(JMM)¶
Java 内存模型,定义多线程下变量的可见性、有序性、原子性:
线程不能直接读写主内存,要通过工作内存。
二、线程私有内存¶
每个线程私有: - 程序计数器。 - 虚拟机栈(局部变量)。 - 本地方法栈。
线程共享: - 堆。 - 方法区/元空间。
三、区别¶
| JMM | 线程内存 | |
|---|---|---|
| 层面 | 抽象规则 | 实际内存结构 |
| 定义 | 可见性/有序性 | 线程栈、堆 |
| 范围 | 所有线程 | 单个线程 |
四、联系¶
JMM 的"工作内存"就是线程私有的栈、寄存器、CPU 缓存。JMM 规定了什么时候工作内存要同步回主内存。
五、一句话¶
- JMM 是规范,规定多线程怎么看对方的修改。
- 线程内存模型是实际内存分布。
不要混淆
JMM ≠ JVM 内存结构。JMM 是并发规范,线程栈/堆是内存分区。