美文网首页
Java内存模型-主内存与工作内存

Java内存模型-主内存与工作内存

作者: gzss | 来源:发表于2019-09-19 21:57 被阅读0次

Java虚拟机规范中定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。

Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量与Java变成中所说的变量有所区别,它包括了实例字段、静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,自然就不会存在竞争问题。为了获得较好的执行性能,Java内存模型并没有限制执行引擎使用处理器的特定寄存器或缓存来和主内存进行交互,也没有限制即时编译器进行调整代码执行顺序这类优化。

Java内存模型规定了所有的变量都存储在主内存(Main Memory)中(此处的主内存与物理硬件的主内存名字一样,也可以互相类比,但此处仅是虚拟机内存的一部分)。每条线程还有自己的工作内存(Working Memory,可与物理硬件的处理器高速缓存类比),线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取,赋值)都必须在工作内存中进行,而不能直接读写主内存中的变量。不同的线程之间也无法直接访问对方的工作内存中的变量,线程间变量的值传递均需要通过主内存来完成。

线程、主内存、工作内存三者的交互关系

这里所说的主内存、工作内存、与java内存区域中的Java堆、栈、方法区等并不是同一个层次的内存划分,这两者基本是没有关系的,如果两者一定要勉强对应起来,那从变量、主内存、工作内存的定义来看,主内存主要对应于Java堆中的对象实例数据部分,而工作内存则对应于虚拟机栈中的部分区域。从更低层次上说,主内存就直接对应于物理硬件的内存,而为了获取更好的运行速度,虚拟机(甚至硬件系统本身的优化措施)可能会让工作内存优先存储于寄存器和高速缓存中,因为程序运行时主要访问读写的使工作内存。

相关文章

  • 《深入理解Java虚拟机》学习笔记(九)(Java内存模型与线程

    Java内存模型与线程 Java内存模型 主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规...

  • 2020-05-05

    Java内存模型(Java Memory Model,JMM) 1.主内存与工作内存 Java内存模型的主要目标是...

  • java虚拟机-内存模型与线程

    一、java内存模型 java定义的内存模型是类似物理计算机的三级缓存模型 1.主内存与工作内存 java内存模型...

  • Java 并发、多线程、锁

    JMM(Java 内存模型) 主内存与工作内存JMM规定JVM有主内存(Main Memory)和工作内存(Wor...

  • java 面试题 并发相关

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

  • 十二. Java内存模型与线程

    12.1 Java内存模型 12.1.1 主内存与工作内存 Java内存模型的主要目标是定义程序各个变量的访问规...

  • java内存模型

    1.内存模型(JMM) 1.1什么是Java内存模型? Java内存模型将内存分为主内存和工作内存两大部分;主内存...

  • Java内存模型

    Java内存模型 主内存和工作内存 Java虚拟机规范中定义了Java内存模型(Java Memory Model...

  • Java内存模型

    主内存与工作内存 Java内存模型规定了所有的变量都存储在主内存中,而每条线程有自己的工作内存,线程的工作内存中保...

  • Java内存模型

    主内存与工作内存 Java虚拟机规范试图定义一种Java内存模型(Java Memory Model,JMM) 来...

网友评论

      本文标题:Java内存模型-主内存与工作内存

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