面试-Java内存模型(JMM)

目录

 

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数据原子操作:

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

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

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

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

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

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

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

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

5.MESI缓存一致性协议:

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

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

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

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

缓存行加锁;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少儿学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值