一.java内存模型的诞生原因以及作用
1.诞生原因
java虚拟机中规范定义的一种内存模型,来屏蔽调各种硬件和操作系统之间的内存访问差异,为了实现java程序在各种平台都能达到一致的内存访问效果。这是它诞生的缘由。
2.作用
其实这个内存模型主要就是去定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出来的底层细节,这里的变量,是指实例字段,静态字段,数组等,不包括局部变量和方法参数。
二.内存模型概述
1.主内存
所以的变量都存在主内存,这里的内存也就是虚拟机的内存,就是虚拟机在运行时,系统分给虚拟机的内存。
2.工作内存
工作内存保存了该线程使用到的变量的主内存副本拷贝,线程对变量的操作必须在工作内存内进行.
3.内存间的交互操作
lock(锁定):作用于主内存的变量,把一个变量标识为一条线程独占的状态。
unlock(解锁):释放锁定的变量,这时才可以被其他线程锁定。
read(读取):主内存读到工作内存。
load(加载):把从主内存中的获取的变量放入工作内存的变量副本中。
use(使用):把工作内存的变量加载到执行引擎,当虚拟机遇到一个需要使用变量的字节码的指令时会用到。
assign(赋值):执行引擎到工作内存。
store(存储):工作内存传到主内存。
write(写入):把store传入来的变量放在主内存的变量里。
4.内存交互操作的规则
1.read和load,store和write必须顺序执行,不一定连续执行。
2.工作内存assign了,值改变了,不能不同步会主内存
3.没有assign不能返回主内存.
4.实施use,store之前,要执行assign,和load
5.一个变量同一时刻只能允许一条线程对其进行lock操作,但是lock可以被同一条线程执行多次。
6.如果对一个变量进行lock,那么就清空工作内存的值,执行引擎要使用时要重新load和assign(load和assign会引起变量的更新)。
7.变量没有被lock,不能执行unlock。
8.执行unlock,要先store和write同步变量回主内存。
原文地址:https://www.cnblogs.com/JimmyFanHome/p/9912394.html