Java内存模型(Java Memory Model)

Java内存模型(JMM)定义了线程和主内存的抽象关系,保证了多线程环境下的可见性、有序性,但不保证原子性。JMM通过内存屏障和volatile关键字来防止指令重排序和解决内存可见性问题,但volatile无法解决原子性问题。内存屏障分为读屏障和写屏障,用于确保数据的正确同步。volatile保证了共享变量的最新值能被所有线程看到,但无法保证操作的原子性。
摘要由CSDN通过智能技术生成

计算机存储体系
 计算存储结构是从本地磁盘到主内存再到cpu。但由于主存与 CPU 处理器的运算能力之间有数量级的差距,所以在传统计算机内存架构中会引入高速缓存来作为主存和处理器之间的缓冲,CPU 将常用的数据放在高速缓存中,运算结束后 CPU 再讲运算结果同步到主存中。

  • 越接近顶端速度越快,容量越小,价格越贵
  • 每一种存储器设备只和它相邻的存储设备打交道

在多CPU的系统中,每个CPU内核都有自己的高速缓存,它们共享同一主内存(Memory)。当多个CPU的运算任务都涉及同一块内存区域时,CPU 会将数据拷贝到高速缓存中进行计算,这可能会导致各自的缓存数据不一致。

JAVA Memory Model

JAVA Memory Model(简称JMM) 本身是一种抽象的概念,并不是真实存在它仅仅描述的是一组规范,通过这种规范定义了程序中各个变量的读写访问方式并决定一个线程对共享变量的写入何时可以让另外一个线程可见 (即多线程环境下的可见性)。通过JMM来实现线程和主内存的抽象关系屏蔽各个硬件平台和操作系统访问内存的差异从而实现java程序在各种平台下都能达到一致的内存访问效果。所谓可见性就是当一个线程修改了某个共享变量的值,其他线程是否能立即感知其变更。JMM规定所有的变量都存储在主内存中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值