说说你对JMM内存模型的理解?为什么需要JMM?

女爷i 2024-02-05 20:01 85阅读 0赞

随着CPU和内存的发展速度差异的问题,导致CPU的速度远快于内存,所以现在的CPU加入了高速缓存,高速缓存一般可以分为L1、L2、L3三级缓存。基于上面的例子我们知道了这导致了缓存一致性的问题,所以加入了缓存一致性协议,同时导致了内存可见性的问题,而编译器和CPU的重排序导致了原子性和有序性的问题,JMM内存模型正是对多线程操作下的一系列规范约束,因为不可能让陈雇员的代码去兼容所有的CPU,通过JMM我们才屏蔽了不同硬件和操作系统内存的访问差异,这样保证了Java程序在不同的平台下达到一致的内存访问效果,同时也是保证在高效并发的时候程序能够正确执行。
在这里插入图片描述
可见性:可见性的问题在上面的回答已经说过,Java保证可见性可以认为通过volatile、
synchronized、final来实现。
有序性:由于处理器和编译器的重排序导致的有序性问题,Java通过volatile、synchronized来保证。
happen-before规则
虽然指令重排提高了并发的性能,但是Java虚拟机会对指令重排做出一些规则限制,并不能让所有的指令都随意的改变执行位置,主要有以下几点:

  1. 单线程每个操作,happen-before于该线程中任意后续操作
  2. volatile写happen-before与后续对这个变量的读
  3. synchronized解锁happen-before后续对这个锁的加锁
  4. final变量的写happen-before于final域对象的读,happen-before后续对final变量的读
  5. 传递性规则,A先于B,B先于C,那么A一定先于C发生
    说了半天,到底工作内存和主内存是什么?
    主内存可以认为就是物理内存,Java内存模型中实际就是虚拟机内存的一部分。而工作内存就是
    CPU缓存,他有可能是寄存器也有可能是L1\L2\L3缓存,都是有可能的。

发表评论

表情:
评论列表 (有 0 条评论,85人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JMM内存模型

    一.硬件的效率与一致性 >         在现代计算机系统中,CUP,内存和IO的处理速度是 CUP > 内存 > IO,由于计算机的存储设备与CPU的运算速度有几个数

    相关 JMM内存模型

    Java内存模型,又称JMM(Java Memory model), 是Java 虚拟机规范中所定义的一种内存模型。 在此内存模型中,规定了,所有的共享变量都是存储于主内存中

    相关 JMM内存模型

    参考文章:[JMM内存模型][JMM] JMM内存模型: java内存模型 > 多线程:指的是这个程序(一个进程)运行时产生了不止一个线程 > > 并行与并发: > >

    相关 jmm内存模型

    一个cpu下有多个核心,每个核心有自己的L1,L2级缓存,所有核公用一个L3级缓存 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVp