主内存与工作内存是JMM定义的抽象概念,非物理内存划分;主内存存储共享变量(如实例字段、静态字段),工作内存为线程私有副本;变量流转须经read+load、use+assign、store+write、lock+unlock八种成对原子操作。

主内存和工作内存不是物理内存的划分,而是 Java 内存模型(JMM)为保障多线程正确性定义的一套抽象规则。理解交互过程的关键,在于看清变量值如何在共享与私有之间安全流动,而不是纠结“它们具体存在哪块硬件上”。
主内存是所有线程可见的共享数据源
它逻辑上对应 JVM 堆和方法区中存储的内容,比如对象的实例字段、类的静态变量、数组元素等。这些数据对所有线程开放读写权限,但线程不能直接修改——就像一本公共记事本,谁都能看,但修改必须先抄到自己的草稿本上再统一提交。
工作内存是线程私有的操作空间
每个线程都有自己的工作内存,它不等于某一块固定内存区域(如栈或缓存),而是对线程操作变量时所用副本的统一抽象。实际可能表现为 CPU 寄存器、L1/L2 缓存、写缓冲区,甚至编译器优化生成的临时变量。线程读写变量,本质上是在操作这个本地副本,而非主内存中的原始值。
变量值流转必须通过八种原子操作严格完成
从主内存到工作内存、再从工作内存回写主内存,整个流程被拆解为 8 个不可分割、必须成对且按序发生的操作:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- read + load:先从主内存读取变量值,再载入工作内存副本(二者必须连续,中间不能插入其他操作)
- use + assign:把工作内存值传给执行引擎参与计算;引擎结果再赋给工作内存变量
- store + write:把工作内存变量值传出,再写入主内存对应位置(同样必须连续)
- lock + unlock:用于 synchronized 同步块/方法,保证临界区变量独占访问
线程间通信必须绕道主内存
线程 A 修改了变量,线程 B 要看到这个变化,并非因为 A “推送”给了 B,而是:
- A 把更新后的值通过 store/write 写回主内存
- B 在后续某个时刻,通过 read/load 重新从主内存加载该变量的新值
如果没有同步机制(如 volatile、synchronized、final 或 happens-before 关系),B 可能一直使用自己工作内存里的旧副本,造成可见性问题。

















