先分清两个「内存模型」
社区讨论里「JVM 内存模型」常被混用,其实指两个东西:
- JVM 运行时数据区(本教程内容):JVM 规范定义的内存分区 —— 程序计数器、虚拟机栈、本地方法栈、堆、方法区(Java 8 后由元空间实现)。它回答「内存被划分成哪几块、分别放什么」。
- Java 内存模型(JMM, JSR-133):关于多线程并发的规范 —— volatile、synchronized、final 的语义,happens-before 规则,工作内存与主内存的抽象。它回答「一个线程的写操作何时对另一个线程可见」。
两者层次完全不同:前者是内存布局,后者是并发可见性契约。本教程只讲前者,涉及并发可见性时请参考 JMM 专门资料。