java多线程的内存模型?

jvm定义的一套java内存模型为了能够跨平台达到一致的内存访问效果,从而屏蔽掉了各种硬件和操作系统的内存访问差异。这点和c和c++并不一样,C和C++会直接使用物理硬件和操作系统的内存模型来处理,所以在各个平台上会有差异,这一点java不会。java的内存模型规定了所有的变量都存储在主内存中,java课程发现...
java多线程的内存模型?


硬件的内存模型
物理机并发处理的方案对于jvm的内存模型实现,也有很大的参考作用,毕竟jvm也是在硬件层上来做事情,底层架构也决定了上层的建筑建模方式。

计算机并发并非只是多个处理器都参与进来计算就可以了,会牵扯到一些列硬件的问题,最直接的就是要和内存做交互。但计算机的存储设备与处理器的预算速度相差太大,完全不能满足处理器的处理速度,怎么办,这就是后续加入的一层读写速度接近处理器运算速度的高速缓存来作为处理器和内存之间的缓冲。

高速缓存一边把使用的数据,从内存复制搬入,方便处理器快速运算,一边把运算后的数据,再同步到主内存中,如此处理器就无需等待了。

高速缓存虽然解决了处理器和内存的矛盾,但也为计算机带来了另一个问题:缓存一致性。特别是当多个处理器都涉及到同一块主内存区域的时候,将可能会导致各自的缓存数据不一致。

那么出现不一致情况的时候,以谁的为准?

为了解决这个问题,处理器和内存之间的读写的时候需要遵循一定的协议来操作,这类协议有:MSI、MESI、MOSI、Synapse、Firefly以及DragonProtocol等。这就是上图中处理器、高速缓存、以及内存之间的处理方式。

另外除了高速缓存之外,为了充分利用处理器,处理器还会把输入的指令码进行乱序执行优化,只要保证输出一致,输入的信息可以乱序执行重组,所以程序中的语句计算顺序和输入代码的顺序并非一致。

JVM内存模型
上面我们了解了硬件的内存模型,以此为借鉴,我们看看jvm的内存模型。

jvm定义的一套java内存模型为了能够跨平台达到一致的内存访问效果,从而屏蔽掉了各种硬件和操作系统的内存访问差异。这点和c和c++并不一样,C和C++会直接使用物理硬件和操作系统的内存模型来处理,所以在各个平台上会有差异,这一点java不会。

java的内存模型规定了所有的变量都存储在主内存中,java课程发现每个线程拥有自己的工作内存,工作内存保存了该线程使用到的变量的主内存拷贝,线程对变量所有操作,读取,赋值,都必须在工作内存中进行,不能直接写主内存变量,线程间变量值的传递均需要主内存来完成。

2023-04-03
mengvlog 阅读 29 次 更新于 2025-09-09 07:28:08 我来答关注问题0
  •  深空见闻 JMM内存模型

    综上所述,JMM内存模型是Java多线程编程中的重要概念,它定义了多线程环境下内存访问的规范,保证了线程安全。通过理解JMM内存模型的基本结构、八大操作、线程安全保证、最佳实践以及底层原理,我们可以更好地编写高效、正确的多线程程序。

  •  翡希信息咨询 Java内存模型(JMM)详解

    Java内存模型(Java Memory Model,简称JMM)定义了Java虚拟机(JVM)在计算机内存(RAM)中的工作方式。JMM是隶属于JVM的,它屏蔽了各种硬件和操作系统的访问差异,保证了Java程序在各种平台下对内存的访问都能保证效果一致。JMM描述的是一组规则,围绕原子性、有序性和可见性展开。JMM定义了线程和主内存...

  •  翡希信息咨询 Java内存模型(JMM)详解

    Java内存模型是Java语言为解决跨平台并发问题而制定的一套规范。以下是对JMM的详细解析:定义与目的:定义:JMM定义了线程与主内存之间的交互规则,确保多线程环境下的内存一致性。目的:使开发者能够在不同操作系统上编写出正确且一致的多线程代码。内存划分:主内存:逻辑上的共享内存,存储Java堆中的对象...

  •  文暄生活科普 Java多线程内存读写 —— 内存屏障的理解

    Java内存模型中的四种读写屏障对应了读读(LoadLoad)、读写(LoadStore)、写写(StoreStore)、写读(StoreLoad)四种情况。这些屏障分别确保了读操作与读操作、写操作与写操作、读操作与写操作之间的顺序性。以LoadLoad和StoreStore为例,它们确保数据读写顺序的正确性,而LoadStore则确保读操作在确认...

  • 这一点java不会。java的内存模型规定了所有的变量都存储在主内存中,java课程发现每个线程拥有自己的工作内存,工作内存保存了该线程使用到的变量的主内存拷贝,线程对变量所有操作,读取,赋值,都必须在工作内存中进行,不能直接写主内存变量,线程间变量值的传递均需要主内存来完成。

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部