Java-JMM和总线嗅探机制

224 阅读1分钟

什么是JMM?

JMM(Java Memory Model)Java内存模型,是用来屏蔽不同操作系统的内存访问差异性从而实现统一的效果;

未命名文件 (2).jpg

也就是说线程工作空间和主内存都存有相同的变量,那么问题来了,工作空间和主内存一致性问题怎么解决的? 在没有并发的情况下每个线程都去修改自己空间的变量,然后写回主内存,单线程内有并发顺序执行是没有问题,然后多线程下怎么办呢?

其实CPU层面也有CPU多级缓存和主内存的一致性问题,单线程和单核CPU下不会出现这个问题

CPU一致性问题解决办法

1.总线锁

通过信息锁定CPU和内存的通信通道,从而实现独占,加锁时其他内存读写操作中断

2.总线嗅探机制

总线你可以认为是一个消息队列

3.基于总线嗅探实现MESI协议的机制

MESI(伊利诺伊州协议,米国大学产物),[MESI协议-百科](baike.baidu.com/item/MESI%E… 基于缓存的数据块(Cache Line)状态实现的

在Java,使用volatile关键字去达到缓存失效的情况,Java线程本质是用户线程,通过操作系统调度操作系统线程,还是利用操作系统的缓存一致性协议实现,不同操作系统可能有不同的协议,对应用程序来说是无感知的