一、Java内存模型

Java内存模型是为了处理多线程环境下的数据一致性问题,它规定了变量在主内存和工作内存之间的交互规则。类似地,物理机内存模型通过高速缓存和缓存一致性协议解决处理器间数据同步。Java内存模型中的变量仅包含共享变量,线程有自己的工作内存,所有读写操作都在工作内存中完成,最后更新回主内存。这种设计旨在抽象并统一不同硬件平台的内存访问行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此处讨论的Java内存模型与Java虚拟机中的运行时内存区域不是从同一个角度讨论的,JVM运行区域是根据内存的功能和作用进行划分的,而Java内存模型是从多线程角度抽象出来的一个逻辑模型,不能将两者一一对应。

1、物理机的内存模型

由于存储设备和和处理器的的运算速度存在几个数量级的差距,因此,现代计算机系统中加入了高速缓存来解决这个问题:将需要用到的数据从内存中复制一份到高速缓存中,处理器从高速缓存中存取数据,再将计算后的数据从高速缓存中写回内存,这样就可以提高处理器存取数据的速度。

 

 但是这也带来了新的问题,由于每个处理器都有自己的高速缓存,当多个处理器同时处理内存中同一份区域的数据时,这些数据就会在各个处理器的高速缓存中同时存在多份复制的数据。各个处理器都对各自缓存中的数据进行了修改,最后同步回主内存中时,到底应该以哪一份数据为准就成为了一个问题,这个问题也叫做缓存一致性问题。

为了解决缓存一致性问题,提出了缓存一致性协议。只要各个处理器在访问缓存时都遵循缓存一致性协议,就能避免缓存一致性问题。

2、Java的内存模型

为了屏蔽各种硬件和操作系统的内存访问差异,JVM中也定义了一种Java内存模型。Java内存模型与物理机内存模型类似,其主要目标是定义程序中各个变量的访问规则。这里的变量与Java编程中提到的变量不同,这里的变量指的是多个线程共享的变量,包括包括实例字段、静态字段和构成数组对象的元素,而线程私有的变量,如局部变量和方法参数不在此列。

Java内存模型规定,所有的变量都存储在主内存(类比物理机内存模型中的主内存)中,每条线程拥有自己的工作内存(类比高速缓存),线程的工作内存中保存了被该线程使用到的变量的主内存中的副本拷贝。线程对变量的读写操作都是在自己的工作内存中进行的,而不能直接读写主内存中的变量,更不能读写其他线程的工作内存。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值