目录

 

1.概念:

2.volatile关键字

3.两个线程,for循环100次自增,得到的值为100~200之间.

4.JMM数据原子操作:

5.MESI缓存一致性协议:

6.汇编lock前缀(volatile缓存可见性实现原理):


1.概念:

是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现java程序在各种不同的平台上都能达到内存访问的一致性。分为主内存+工作内存

2.volatile关键字

 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:

  1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。

  2)禁止进行指令重排序。

3.两个线程,for循环100次自增,得到的值为100~200之间.

4.JMM数据原子操作:

面试-Java内存模型(JMM)

read(读取):从主内存中读取数据;

load(加载):将从主内存读取到的数据写入到工作内存;

use(使用):数据在工作内存中计算;

assign(赋值):将计算好的数据重新赋值到工作内存中;

store(存储):将数据从工作内存写入到主内存;

write(写入):将存储的变量值赋值给主内存中的变量;

lock(锁定):将主内存变量加锁,标识为线程独占状态;----这个是加在了store之前

unlock(解锁):将内存变量解锁,解锁后其他线程可以锁定该变量;----这个解锁发生在write之后

5.MESI缓存一致性协议:

当变量做出修改后,在从工作内存store-->write主内存这个过程中,会经过CPU总线(物理机制),会被CPU总线嗅探机制感知到,从而将其他工作内存中的变量失效,重新在read主内存中的变量.

6.汇编lock前缀(volatile缓存可见性实现原理):

当前工作内存的数据立即写会到系统主内存;

这个写回操作会引起在其他CPU里缓存了该变量数据无效;

缓存行加锁;

 

相关文章: