Java 线程工作内存

生活        2019-11-04   来源:qy雪路浪游

线程的工作内存

所谓线程的“工作内存”到底是个什么东西?有的人认为是线程的栈,其实这种理解是不正确的。看看JLS(java语言规范)对线程工作内存的描述,线程的working memory只是cpu的寄存器和高速缓存的抽象描述。

我们都知道,现在的计算机,cpu在计算的时候,并不总是从内存读取数据,它的数据读取顺序优先级 是:寄存器-高速缓存-内存。线程耗费的是CPU,线程计算的时候,原始的数据来自内存,在计算过程中,有些数据可能被频繁读取,这些数据被存储在寄存器 和高速缓存中,当线程计算完后,这些缓存的数据在适当的时候应该写回内存。当个多个线程同时读写某个内存数据时,就会产生多线程并发问题,涉及到三个特性:原子性,有序性,可见性

那 Java的线程不是有栈吗?难道栈不是工作内存吗?

工作内存这四个字得放到具体的场景中描述,方能体现它具体的意义,在描述JVM的线程同步时,工作内存指的是寄存器和高速缓存的抽象描述,具体请自行参阅JLS。

动态的线程同步的内存模型,涵盖了CPU,寄存器,高速缓存,内存。

Java 线程工作内存

Java 内存模型的组成

  • 主内存

Java 内存模型规定了所有变量都存储在主内存(Main Memory)中。

  • 工作内存

每条线程都有自己的工作内存(Working Memory),线程的工作内存中保存了该线程使用到的变量的主内存中的共享变量的副本拷贝。

上面讲的都是动态的内存模型,甚至已经超越了JVM的范围。

JVM的静态内存储模型(运行时数据区

JVM的静态内存储模型(运行时数据区)只是一种对内存的物理划分而已,它只局限在内存,而且只局限在JVM的内存。那些什么线程栈,eden区都仅仅在JVM内存。

Java 线程工作内存