Java内存模型-JMM
内存模型与内存区域
很多时候,二者会混淆,所以咱们先做区分:内存模型与内存区域
- 内存区域是指
JVM运行时将数据分区域存储
,强调的是对空间的分配 - 内存模型(JMM)是定义了
线程和主内存之间的抽象关系
。即定义了 JVM 在计算机内存中的工作方式
内存模型
抽象关系定义
- 线程之间的共享区间为主内存,也就是硬件中
- 每个线程都有个属于自己的本地内存,用于存储线程变化过程中的值。本地内存是JMM的一个抽象概念,并不真实存在
- 取值过程:线程 <---> 工作内存 <---> 寄存器和高速缓存 <---> 主内存。
寄存器和高速缓存
的作用在于加快读的速度 - JVM的静态内存储模型(JVM内存模型)只是一种对内存的物理划分而已,它只局限在内存,而且只局限在JVM的内存
内存模型结构图
图解:由于JMM的存在,让线程有本地内存(工作内存)的定义。同时也定义了,数据的访问方式。
volatile
volatile
是基于JMM
下的一个产物。基于JMM下线程之间相互独立,互不干涉,以至于相互通讯变得困难,故诞生了 volatile。
private volatile String COM_STR = new String() ;
死记volatile
的特性:
- 可见性
- 有序性,禁止指令重排序(happen-before原则)
- 不能保证原子性
理解
volatile
的特性的一个好方法,是将volatile看成使用互斥锁。对其进行的读、写操作属于同步操作
锁的特性是可以做到临界区内保持原子操作。而Happens-before 规则也使得操作之间存在可见性。
使用 volatile后内存数据共享方式(嗅探是关键)
__EOF__

本文作者:之士咖啡
本文链接:https://www.cnblogs.com/zz-1q/p/17761700.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/zz-1q/p/17761700.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人