美文网首页技术栈
Java内存模型与硬件内存模型

Java内存模型与硬件内存模型

作者: 烟雨乱平生 | 来源:发表于2019-10-23 13:52 被阅读0次

硬件内存模型

不管是什么内存模型,最终还是运行在计算机硬件上的,所以我们有必要了解计算机硬件内存架构



现代计算机一般都有2个以上CPU,而且每个CPU还有可能包含多个核心。因此,如果我们的应用是多线程的话,这些线程可能会在各个CPU核心中并行运行。

在CPU内部有一组CPU寄存器,也就是CPU的储存器。CPU操作寄存器的速度要比操作计算机主存快的多。在主存和CPU寄存器之间还存在一个CPU缓存,CPU操作CPU缓存的速度快于主存但慢于CPU寄存器。某些CPU可能有多个缓存层(一级缓存和二级缓存)。

当一个CPU需要访问主存时,会先读取一部分主存数据到CPU缓存,进而在读取CPU缓存到寄存器。当CPU需要写数据到主存时,同样会先flush寄存器到CPU缓存,然后再在某些节点把缓存数据flush到主存。

JMM

Java内存模型即Java Memory Model,简称JMM。JMM定义了Java虚拟机在计算机内存中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。

Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。原始的Java内存模型效率并不是很理想,因此Java1.5版本对其进行了重构,现在的Java8仍沿用了Java1.5的版本。


在硬件内存模型里面关心的是不同CPU的缓存之间如何保证数据一致性,在Java内存模型里面关心的是不同线程之间的共享变量的一致性。

JVM对Java内存模型的实现

Java内存模型和硬件架构之间的桥接

Java内存模型和硬件内存架构并不一致。硬件内存架构中并没有区分栈和堆,从硬件上看,不管是栈还是堆,大部分数据都会存到主存中,当然一部分栈和堆的数据也有可能会存到CPU寄存器中,如下图所示,Java内存模型和计算机硬件内存架构是一个交叉关系:


支撑Java内存模型的基础原理

  • 指令重排
  • 数据依赖性
  • as-if-serial
  • 内存屏障
  • happens-before

相关文章

  • 深度解析Java多线程的内存模型

    内部java内存模型 硬件层面的内存模型 Java内存模型和硬件内存模型的联系 共享对象的可见性 资源竞速 Jav...

  • 高效并发

    从JVM的角度看一下Java与线程,内存模型,线程安全以及JVM对于锁的优化 硬件内存模型与JVM内存模型 硬件的...

  • java基础知识

    java 内存区域、JMM、JAVA线程模型、硬件内存模型 java内存区域分为共享区域(堆、方法区常量池)、私有...

  • 图解jvm--(四)内存模型

    内存模型 java 内存模型 很多人将【java 内存结构】与【java 内存模型】傻傻分不清,【java 内存模...

  • java 面试题 并发相关

    java 的内存模型(JMM) 主内存 java内存模型规定所有变量存放在主内存中 类比硬件中的内存 工作内存 每...

  • JMM内存模型

    什么是Java内存模型 Java内存模型是一种符合内存模型规范的,屏蔽了各种硬件和系统的访问差异。保证Java程序...

  • JUC(一)JMM内存模型

    一、简介 JMM((Java Memory Model)是Java内存模型,与JVM内存模型不同,与CPU内存模型...

  • Java内存模型与线程——《深入理解JVM》读书笔记

    一、Java内存模型 Java内存模型(Java Memory Model,JMM)是用来屏蔽各种硬件和操作系统的...

  • 第12章 Java内存模型与线程

    第12章 Java内存模型与线程 12.3Java内存模型 Java内存模型 [1](Java Memory Mo...

  • Java基础之内存模型

    Java基础之内存模型 目录 Java内存模型简单介绍 JVM介绍 存储方式 并发原因 Java内存模型与系统内存...

网友评论

    本文标题:Java内存模型与硬件内存模型

    本文链接:https://www.haomeiwen.com/subject/lzihvctx.html