Skip to content

Java内存模型(JMM)

两种并发模型的比较

在Java中,使用的是共享内存并发模型

Java运行时数据区域

对于每一个线程来说,栈都是私有的,而堆是共有的。

也就是说在栈中的变量(局部变量、方法定义参数、异常处理器参数)不会在线程之间共享,也就不会有内存可见性的问题,也不受内存模型的影响。而在堆中的变量是共享的,本文称为共享变量。

所以,内存可见性是针对的**共享变量**。

JMM抽象示意图

根据JMM的规定,线程对共享变量的所有操作都必须在自己的本地内存中进行,不能直接从主内存中读取

JMM通过控制主内存与每个线程的本地内存之间的交互,来提供内存可见性保证