目录
一、JVM内存区域
JVM在运行时,会将其管理的内存区域划分为方法区、堆、虚拟机栈、本地方法栈和程序计数器5个区域;
- 方法区和堆是所有下城共享的区域;
- 虚拟机栈、本地方法栈、程序计数器是各个线程私有的;
二、JVM内存模型(Java Memory Model,简称JMM)
JMM用于定义程序汇总变量的访问规则,即在JVM中如何将变量存储到内存,以及如何从内存中获取变量(此处变量指所有线程共享的变量)。
与JVM内存区域不同,JMM是从另一个角度对内存进行划分,分为主内存和工作内存。
JMM规定所有的变量都存储在主内存中,每个线程还拥有自己独立的工作内存。主内存中的变量会通过复制的方式留给线程的工作内存一个副本,供各个线程独立使用。 线程对变量的所有读写操作都是在工作内存中进行的,工作内存中的副本变量会通过JMM与主内存中的原变量保持同步。
三、各个线程运行期间必须遵守的规定
- 只能方案文自己工作内存中的变量;
- 无法直接访问其他线程工作内存中的变量;
- 可以通过主内粗间接访问