跳转至

JVM 内存模型与 Java 线程内存模型的区别

一、JVM 内存模型(JMM)

Java 内存模型,定义多线程下变量的可见性、有序性、原子性:

主内存(共享变量)
工作内存(每个线程私有,对应 CPU 缓存)

线程不能直接读写主内存,要通过工作内存。

二、线程私有内存

每个线程私有: - 程序计数器。 - 虚拟机栈(局部变量)。 - 本地方法栈。

线程共享: - 堆。 - 方法区/元空间。

三、区别

JMM 线程内存
层面 抽象规则 实际内存结构
定义 可见性/有序性 线程栈、堆
范围 所有线程 单个线程

四、联系

JMM 的"工作内存"就是线程私有的栈、寄存器、CPU 缓存。JMM 规定了什么时候工作内存要同步回主内存。

五、一句话

  • JMM 是规范,规定多线程怎么看对方的修改。
  • 线程内存模型是实际内存分布。

不要混淆

JMM ≠ JVM 内存结构。JMM 是并发规范,线程栈/堆是内存分区。