当前位置:首页 > 内存 > 正文

jvm内存模型图解(jvm内存区域)

  • 内存
  • 2024-08-13 11:14:06
  • 6835

一、java多线程的内存模型?


硬件内存模型

JVM的并发解决方案物理机时间内存模型的实现也有巨大的参考作用。毕竟JVM也是做硬件层的事情,底层的架构也决定了上层架构的建模方法。


计算机并发不仅仅涉及多个处理器参与计算。这会涉及到一系列的硬件问题。最直接的问题是内存处理。相互影响。然而,计算机的存储设备与处理器的预期速度相差太大,无法满足处理器的处理速度。该怎么办?处理器和存储器之间的高速缓存。


Buffer从内存中复制使用过的数据,以方便处理器快速运行,然后将计算后的数据同步到主存中,以便处理器快速运行。无需等待。


缓存虽然解决了处理器和内存之间的冲突,但它也给计算机带来了另一个问题:缓存的一致性。特别是当多个处理器使用同一个主存区域时,各自的缓存数据可能不一致。


那么当发生冲突时,谁会占上风呢?


为了解决这个问题,处理器和内存之间的读写需要遵循一定的协议,例如:MSI、MESI、MOSI、Synapse、Firefly和DragonProtocol,ETC。上图中处理器、缓存和内存的处理方式如下。


除了缓存之外,为了充分利用处理器,处理器还会优化不按代码顺序执行输入指令,只要当输出一致,输入信息可以乱序重新排列,从而使程序中语句计算的顺序与输入代码的顺序不一致。



JVM内存模型

上面我们了解了硬件的内存模型,以此模型为参考,我们看一下jvm的内存模型。



jvm为了实现高效访问内存而定义的一套java内存模型,跨平台是一致的,从而屏蔽不同硬件和操作系统的内存访问差异。这与C和C++不同。C和C++会直接使用操作系统的物理硬件和内存模型进行处理,因此每个平台上都会有差异。


Java的内存模型规定所有变量都存储在主存中。Java课程认识到每个线程都有自己的工作内存,并且工作内存是被缓存的。线程使用的变量的主内存副本。所有线程操作(读取和分配变量)都必须在工作内存中执行。在主请求线程之间传递变量值。记忆几乎完整了。