JAVA 内存模型(JMM)
2021/10/14 7:16:51
本文主要是介绍JAVA 内存模型(JMM),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 一、内存屏障
- 1. 内存屏障的作用
- 2. volatile关键字
Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。
一、内存屏障
在CPU中,每个CPU又有多级缓存,一般分为L1,L2,L3。
CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找,每个cpu有且只有一套自己的缓存。
因为这些缓存,提高了数据访问性能,避免每次都向主内存索取,但是弊端也很明显,不能实时的和内存发生信息交换,涉及到一个缓存一致性的问题,而且由于操作系统可能存在重排序,导致读取到错误的数据,因此,操作系统提供了一些内存屏障以解决这种问题.
不同硬件对内存屏障的实现方式不一样,java屏蔽掉这些差异,通过jvm生成内存屏障
1. 内存屏障的作用
cpu执行指令可能是无序的,它有两个比较重要的作用
- 阻止屏障两侧指令重排序。
- 强制把写缓冲区/高速缓存中的脏数据等写回主内存,让缓存中相应的数据失效。
2. volatile关键字
volatile 保证了内存可见性并且禁止CPU指令重排序。
可见性:指线程之间的可见性,一个线程修改的状态对另一个线程是可见的,也就是一个线程修改的结果,另一个线程马上就能看到。
指令重排序: JVM为了优化指令、提高程序运行效率,在不影响单线程程序执行结果的前提下,尽可能地提高并行度;指令重排序包括编译器重排序和运行时重排序。
注意:volatile不能保证数据的原子性。
举个
这篇关于JAVA 内存模型(JMM)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27MQ底层原理资料详解:新手入门教程
- 2024-11-27MQ项目开发资料入门教程
- 2024-11-27RocketMQ源码资料详解:新手入门教程
- 2024-11-27本地多文件上传简易教程
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程