硬件内存模型
物理机并发的解决对JVM的内存模型实现也有很大的参考。毕竟JVM也是做硬件层的事情,底层架构也定义了对上层架构建模的方法。
计算机并发性不仅仅是让多个处理器参与计算。这会涉及到一系列的硬件问题。最直接的问题是内存处理。相互影响。然而,计算机的存储设备与处理器的预算速度相差太大,无法满足处理器的处理速度。你必须做什么?作为处理器和存储器之间的缓冲区。
Buffer从内存中复制使用过的数据,以方便处理器快速运行,然后将计算后的数据同步到主存中,以便处理器快速运行。无需等待。
缓存虽然解决了处理器和内存之间的冲突,但它也给计算机带来了另一个问题:缓存的一致性。特别是当多个处理器使用同一个主存区域时,各自的缓存数据可能不一致。
那么当发生冲突时,谁会占上风呢?
为了解决这个问题,处理器和内存之间的读写需要遵循一定的协议,例如:MSI、MESI、MOSI、Synapse、Firefly和DragonProtocol,ETC。这就是上图中处理器、缓存和内存的处理方式。
除了缓存之外,为了充分利用处理器,处理器还会优化不按代码顺序执行输入指令,只要当输出一致时,输入信息可以乱序重新排列,从而使程序中语句计算的顺序与输入代码的顺序不一致。
JVM内存模型
上面我们了解了硬件的内存模型,以此模型为参考,我们看一下jvm的内存模型。
jvm为了实现高效访问内存而定义的一套java内存模型,跨平台是一致的,从而屏蔽不同硬件和操作系统的内存访问差异。这与C和C++不同。C和C++会直接利用操作系统的物理硬件和内存模型进行处理,因此在各个平台上会有差异。
Java的内存模型规定所有变量都存储在主存中。Java课程认识到每个线程都有自己的工作内存,并且工作内存是被缓存的。线程使用的变量的主内存副本。所有线程操作(读取和分配变量)都必须在工作内存中执行。在请求线程之间传递变量值。主存储器完成。
上一篇:jvm内存模型及调优
下一篇:jvm对象内存模型