【Java并发编程】(一)——Java内存模型

定义:

  Java内存模型是用来定义变量的访问规则。即在虚拟机中将变量存储到内存和从内存中取出变量的底层细节。
  简而言之,Java内存模型是对特定内存读写访问的过程抽象。
                          ——《深入理解Java虚拟机》

变量And特定内存?

1.这里的变量和Java语言中的变量不相同。

这里的变量指:实例字段,静态字段和构成数组对象的元素。
在《Java并发编程的艺术》中将这些变量称为共享变量。
不包括:局部变量,方法参数,异常处理器参数。

我们在学习Java虚拟机内存区域时了解到:

对象实例和数组存放在堆区;
静态字段存放在方法区;
而这两个区域有一个共同的特点就是线程共享的。

而局部变量,方法参数,异常处理器参数都是存放在局部方法栈。而这部分是线程私有的。

【注意】:如果局部变量是一个引用类型,那么引用本身是线程私有的,而引用所指向的对象是线程共享。

2.这里的特定内存也就是上述提到的变量的存储的地方,我们称之为主内存。同时,每条线程还有自己的工作内存,这里保存了该线程使用到的变量的主内存副本拷贝。

(1)线程对变量的所有操作只能在自己的工作内存中进行,而不能直接读写主内存;
(2)不同线程之间无法直接访问对方工作内存中的变量
(3)线程间变量值的传递需要通过主内存来完成。

这里写图片描述

(下图显示线程间变量值传递必须通过主内存来完成)

这里写图片描述

步骤1:即线程A把更新过的共享变量刷新到主内存中区。
步骤2:线程B到主内存中去读取A之前已经更新过的共享变量。

Java内存模型和Java内存区域的关系

1.是按不同角度对内存进行划分;
2.主内存和工作内存都是虚拟机内存的一部分;
2.暂且可以把主内存和堆对应起来;工作内存和虚拟机栈的一部分对应起来。

(下图中可以看到方法区和堆是线程共享区域)
这里写图片描述

Java内存模型和硬件中的内存

Java中线程、工作内存、主内存的关系与计算机硬件中的处理器、高速缓存和内存的关系很类似。
内存模型中的主内存一般存储在硬件中的内存。
而工作内存一般存储与寄存器和高速缓存。

这里写图片描述

作用

1.保证并发程序的正确性
2.能够提高并发程序的执行速度(存储于寄存器和高速缓存中的工作内存访问速度快)
3.Java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问差异,以实现Java程序在各种平台下都能达到一致的内存访问效果。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值