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 阅读 44 次 更新于 2025-10-30 13:25:14 我来答关注问题0
  •  深空见闻 JMM内存模型

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

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

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

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

  •  文暄生活科普 尚学堂百战程序员:Java内存模型与线程

    一、Java内存模型的基本概念在Java中,内存被划分为主内存和工作内存。主内存是所有线程共享的,存储了Java实例变量、静态变量和数组等。而工作内存是每个线程独有的,存储了该线程使用到的变量的副本。线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,然后再通过一定的方式同步回主内存。二...

  •  文暄生活科普 05.深入理解JMM和Happens-Before

    在编程的世界中,Java内存模型(JMM)与Happens-Before规则是理解并发编程的关键。本文将深入探讨这两个概念,揭示它们在多线程编程中的作用以及它们如何协同工作以确保程序的正确执行。首先,JMM(Java Memory Model)定义了Java程序中内存操作的可见性规则。它描述了多线程环境下,数据在内存和处理器缓存之间...

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

Java相关话题

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