温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java内存模型究竟是什么

发布时间:2026-09-19 03:36:16 来源:亿速云 阅读:97 作者:小樊 栏目:编程语言

Java 内存模型(Java Memory Model,简称 JMM)是 Java 语言规范中定义的一套抽象规则,用来描述:在多线程环境下,一个线程对共享变量的修改,何时、以何种方式对其他线程可见,以及编译器和处理器可以对指令做哪些重排序。

它不是 JVM 的内存结构(堆、栈、方法区),而是一个并发语义模型。


一、为什么需要 Java 内存模型?

在单线程中,程序看起来是按代码顺序执行的。但在多线程 + 编译优化 + CPU 优化下,会出现:

  • 指令重排序
  • 寄存器 / 缓存导致变量不可见
  • 多线程读取到“过期”的值

例如:

// 线程A
flag = true;
value = 42;

// 线程B
if (flag) {
    System.out.println(value);
}

如果没有 JMM,线程 B 可能看到 flag=true 但 value=0。

JMM 就是为了解决这类问题。


二、JMM 的核心抽象:主内存 & 工作内存

JMM 把内存抽象为两部分:

1. 主内存(Main Memory)

  • 所有共享变量(实例字段、静态字段)都存这里
  • 类似“真实内存”

2. 工作内存(Working Memory)

  • 每个线程私有的“副本”
  • 线程读变量:从主内存拷贝到工作内存
  • 线程写变量:先改工作内存,再刷回主内存
线程A工作内存  <--> 主内存 <--> 线程B工作内存

⚠️ 注意:

  • 工作内存 ≠ 栈
  • 这是逻辑模型,不是 JVM 实际内存结构

三、JMM 解决的三大问题

1️⃣ 可见性(Visibility)

一个线程改了变量,其他线程能不能立刻看到?

✅ 用 volatile、synchronized、final 保证

volatile boolean flag = false;

2️⃣ 有序性(Ordering)

代码是否按写的顺序执行?

❌ 编译器和 CPU 可能重排序
✅ JMM 通过 happens-before 规则约束

3️⃣ 原子性(Atomicity)

操作是否不可中断?

  • 基本读写是原子的
  • i++ 不是原子的
  • 用 synchronized、Lock、Atomic* 保证

四、happens-before:JMM 的核心规则

JMM 不要求“禁止重排序”,而是规定:

如果 A happens-before B,那么 A 的结果对 B 可见,且 A 看起来先于 B 执行

常见 happens-before 规则

  1. 程序顺序规则

    • 单线程内,前面的操作 happens-before 后面的
  2. volatile 规则

    • 写 volatile 变量 happens-before 后续读该变量
  3. 锁规则

    • unlock happens-before 后续 lock
  4. 线程启动规则

    • Thread.start() happens-before 线程中的任何操作
  5. 线程终止规则

    • 线程所有操作 happens-before Thread.join() 返回
  6. 传递性

    • A hb B,B hb C ⇒ A hb C

五、volatile 的底层语义(JMM 视角)

volatile int x = 0;

JMM 保证:

  • 写 x:立即刷主内存
  • 读 x:从主内存读
  • 禁止重排序(内存屏障)

但 ❌ 不保证原子性


六、JMM ≠ JVM 内存结构

概念 说明
JMM 并发语义规则
JVM 内存结构 堆、栈、方法区
JMM 是规范 JVM 是实现

七、一句话总结

Java 内存模型是 Java 对“多线程如何安全地共享内存”的抽象规范,它通过主内存 / 工作内存和 happens-before 规则,保证可见性、有序性和合理的原子性。

如果你愿意,我可以:

  • 用 图 画 JMM 模型
  • 对比 JMM vs CPU 缓存一致性
  • 结合 真实并发 bug 案例 讲
  • 深入 volatile / synchronized 的底层实现

你想从哪一层继续?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手