Java内存模型JMM
Java内存模型(即Java Memory Model ,简称JMM)本身是一种抽象的概念,并不真实存在,它描述的是- -组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。
JVM的运行实体是线程,每个线程创建时,JVM为其创造一个工作内存,用于存储线程私有的数据,而java内存模型规定所有内存变量存储在主内存中,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操作必须在工作内存中进行,首先将变量从主内存拷贝到自己的工作内存中并进行操作,操作完成后再将变量写入主内存,工作内存是线程的私有区域
JMM中的主内存
➢存储Java实例对象
➢包括成员变量、类信息、常量、静态变量等
➢属于数据共享的区域,多线程并发操作时会引|发线程安全问题
JMM与Java内存区域划分是不同的概念层次
➢JMM描述的是一组规则,围绕原子性,有序性、可见性展开
➢相似点:存在共享区域和私有区域
主内存与工作内存的数据存储类型以及操作方式归纳
➢方法里的基本数据类型本地变量将直接存储在工作内存的栈帧结构中
➢引用类型的本地变量:引用存储在工作内存中,实例存储在主内存中
➢成员变量、static变量、 类信息均会被存储在主内存中
➢主内存共享的方式是线程各拷贝- -份数据到工作内存,操作完成
后刷新回主内存