一、Java内存区域
注:每个方法执行时都会创建一个栈桢来存储方法的变量表、操作数栈、动态链接方法、返回值、返回地址等信息。
每个方法从调用到结束,就对于一个栈桢在虚拟机中的入栈和出栈过程。
二、Java内存模型(Java Memory Modol,JMM)
Java内存模型(JMM)本身是一种抽象的概念,并不真实存在。
它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段、静态字段和构成数组对象的元素)的访问方式。
由于JVM运行程序的实体是线程,每个线程创建时JVM都会为其创建一个工作内存(或栈空间),用于存储线程私有的数据。
Java内存模型中规定所有的变量都存储于主内存。主内存是共享内存区域,所有线程都可以访问。
但线程对变量的操作(读取、赋值等)必须在工作内存中进行。
(1)要将变量从主内存拷到自己的的工作内存空间;
(2)对变量进行操作;
(3)操作完成后再将变量写回主内存。
注:不能直接操作主内存中的变量,工作内存中存储着主内存中的变量副本拷贝。因为工作内存是每个线程私有的数据区域,所以不同的县城之间无法访问对方的工作内存,线程间的通信(传值)必须通过主内存来完成。
三、区别
Java内存模型和Java内存划分是不同的概念层次。
JMM和Java内存区域唯一的相似点:都存在共享数据区域和私有数据区域。