【无标题】

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

JMM (java memory model) java内存模型

java内存模型就是java线程与机器主内存之间的抽象关系。

1、cpu高速缓存
cpu的每个核都有自己的寄存器和高速缓存。
核------>寄存器---->缓存----->内存
核首先会去寄存器拿没有去缓存再没有才会访问主内存。
每过一段时间会把缓存修改的内容刷新到内存多核处理器之间的缓存需要协议来维护一致性。
如果寄存器缓存有数据就不会访问主内存这就会导致数据的不可见性为了保证数据的可见性可以为变量添加volatile关键字就会直接去主内存拿每次都是最新的数据。

2、局部性原理
计算机科学中著名的局部性原理
当一个数据被用到时其附近的数据也通常会马上被使用。程序运行期间所需要的数据通常比较集中。由于磁盘顺序读取的效率很高不需要寻道时间只需很少的旋转时间因此对于具有局部性的程序来说预读可以提高I/O效率。

3、Java 内存模型是一种规范定义了很多东西

每个线程都有一个私有的本地内存Local Memory本地内存中存储了该线程以读/写共享变量的拷贝副本
线程对变量的所有操作都必须在本地内存中进行而不能直接读写主内存。
在这里插入图片描述
为了更好的控制主内存和本地内存的交互Java 内存模型定义了八种操作来实现

lock锁定作用于主内存的变量把一个变量标识为一条线程独占状态
unlock解锁作用于主内存变量把一个处于锁定状态的变量释放出来释放后的变量才可以被其他线程锁定
read读取作用于主内存变量把一个变量值从主内存传输到线程的工作内存中以便随后的load动作使用
load载入作用于工作内存的变量它把read操作从主内存中得到的变量值放入工作内存的变量副本中
use使用作用于工作内存的变量把工作内存中的一个变量值传递给执行引擎每当虚拟机遇到一个需要使用变量的值的字节码指令时将会执行这个操作
assign赋值作用于工作内存的变量它把一个从执行引擎接收到的值赋值给工作内存的变量每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作
store存储作用于工作内存的变量把工作内存中的一个变量的值传送到主内存中以便随后的write的操作
write写入作用于主内存的变量它把store操作从工作内存中一个变量的值传送到主内存的变量中

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6