java内存模型是程序员在学习java编程开发技术的时候需要重点掌握的编程知识之一,而今天我们就通过案例分析来了解一下,java编程宏主内存与工作内存的概念和交互操作。
1、主内存和工作内存
Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量与Java编程中所说的变量有所区别,它包括了实例字段、静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为这些是线程私有的,不会被共享,自然就不存在竞争问题。为了获得较好的执行效能,Java内存模型并没有限制执行引擎使用处理器的特定寄存器或者缓存来和主内存进行交互,也没有限制即使编译器进行调整代码执行顺序这类优化措施。
Java内存模型规定了所有的变量都要存储在主内存中(此处的主内存仅仅是虚拟机内存的一部分),每条线程还有自己的工作内存(workingmemory,类似于处理器的高速缓存),线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量。不同线程之间也无法直接访问对方工作内存中的变量,线程之间变量值的传递均需要通过主内存来完成,线程、主内存、工作内存三者的交互关系如下图所示:
这里提到的主内存、工作内存与Java内存区域中的Java堆、栈、方法区等并不是同一个层次的内存划分,这两者基本没有关系;如果一定要勉强对应起来,