Java教程

JAVA 内存模型(JMM)

本文主要是介绍JAVA 内存模型(JMM),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

    • 一、内存屏障
      • 1. 内存屏障的作用
      • 2. volatile关键字

Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。

一、内存屏障

在CPU中,每个CPU又有多级缓存,一般分为L1,L2,L3。

CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找,每个cpu有且只有一套自己的缓存。

因为这些缓存,提高了数据访问性能,避免每次都向主内存索取,但是弊端也很明显,不能实时的和内存发生信息交换,涉及到一个缓存一致性的问题,而且由于操作系统可能存在重排序,导致读取到错误的数据,因此,操作系统提供了一些内存屏障以解决这种问题.

不同硬件对内存屏障的实现方式不一样,java屏蔽掉这些差异,通过jvm生成内存屏障

1. 内存屏障的作用

cpu执行指令可能是无序的,它有两个比较重要的作用

  1. 阻止屏障两侧指令重排序。
  2. 强制把写缓冲区/高速缓存中的脏数据等写回主内存,让缓存中相应的数据失效。

2. volatile关键字

volatile 保证了内存可见性并且禁止CPU指令重排序

可见性:指线程之间的可见性,一个线程修改的状态对另一个线程是可见的,也就是一个线程修改的结果,另一个线程马上就能看到。

指令重排序: JVM为了优化指令、提高程序运行效率,在不影响单线程程序执行结果的前提下,尽可能地提高并行度;指令重排序包括编译器重排序和运行时重排序。

注意:volatile不能保证数据的原子性。

举个

这篇关于JAVA 内存模型(JMM)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!