Java内存模型-JMM

内存模型与内存区域

 很多时候,二者会混淆,所以咱们先做区分:内存模型与内存区域

  • 内存区域是指JVM运行时将数据分区域存储,强调的是对空间的分配
  • 内存模型(JMM)是定义了线程和主内存之间的抽象关系。即定义了 JVM 在计算机内存中的工作方式

内存模型

抽象关系定义

  • 线程之间的共享区间为主内存,也就是硬件中
  • 每个线程都有个属于自己的本地内存,用于存储线程变化过程中的值。本地内存是JMM的一个抽象概念,并不真实存在
  • 取值过程:线程 <---> 工作内存 <---> 寄存器和高速缓存 <---> 主内存。寄存器和高速缓存的作用在于加快读的速度
  • JVM的静态内存储模型(JVM内存模型)只是一种对内存的物理划分而已,它只局限在内存,而且只局限在JVM的内存

内存模型结构图

  图解:由于JMM的存在,让线程有本地内存(工作内存)的定义。同时也定义了,数据的访问方式。
image

volatile

  volatile 是基于JMM下的一个产物。基于JMM下线程之间相互独立,互不干涉,以至于相互通讯变得困难,故诞生了 volatile。
private volatile String COM_STR = new String() ;

死记volatile的特性:

  • 可见性
  • 有序性,禁止指令重排序(happen-before原则)
  • 不能保证原子性

理解volatile 的特性的一个好方法,是将volatile看成使用互斥锁。对其进行的读、写操作属于同步操作
锁的特性是可以做到临界区内保持原子操作。而Happens-before 规则也使得操作之间存在可见性。

使用 volatile后内存数据共享方式(嗅探是关键)

image


__EOF__

本文作者之士咖啡
本文链接https://www.cnblogs.com/zz-1q/p/17761700.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   之士咖啡  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示