1.主内存和工作内存
Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量储存到内存和从内存中取出变量这样的底层细节。此处的变量与Java编程中所说的变量有所区别,它包括了实例字段、静态字段和构成数组对象的元素,但不包括局部变量和方法参数 ,因为它们是线程私有的,不会被共享,自然也不会有竞争问题存在,为了获得较好的执行性能,Java内存模型并没有限制执行引擎使用处理器的特定寄存器或者缓存来和主内存进行交互,也没有限制即时编译器进行调整代码执行顺序这类优化措施。
Java内存模型规定了所有变量都存储在主内存中(此处的主内存与介绍物理硬件时的主内存名字一样,两者也可以相互类比,但此处只是虚拟机内存的一部分。)每条线程还有自己的工作内存,线程的工作内存中保存了该线程使用的变量的主内存的副本拷贝,线程对变量的所有操作(读取、赋值)都必须在工作内存中进行,而不能直接读取主内存的变量,不同线程之间无法直接访问对方工作内存中的变量,线程变量值的传递都需要通过主内存来完成。