JVM工作内存和CPU缓存一样吗

Is JVM working memory the same as CPU cache

JVM spec说每个线程都有自己的working memory,列举了use, assign, load, read, store, write, lock, unlock几个操作。工作内存与CPU缓存相同,还是工作内存与线程堆栈相同?

规范还说“当线程执行一个程序时,它对这些工作副本进行操作。”因此,当 JVM 执行指令将操作数堆栈中的两个值相加时,它会从堆栈中弹出两个操作数并将它们相加。在这种情况下,这些弹出操作数的工作副本是什么以及在哪里?

没有。您可以访问工作记忆。您实际上无权访问缓存。您不应该知道那里有什么,它会 look-ahead 获取和保存 CPU 缓存中的先前值。如果处理得当,缓存应该是不可见的,只是在幕后加快速度。实际工作记忆存储工作等的东西

您正在查看最旧的规格,即 still online at Oracle(在页面底部)。自本文件发布以来,我们谈论的时间已经过去了至少 16 年。但即使在过时的文档中,您也会发现发布时已经过时的章节。

beginning of the chapter 所述。

It has been adapted with minimal changes from Chapter 17 of the first edition of The Java™ Language Specification, by James Gosling, Bill Joy, and Guy Steele.

请注意,它说它基于 JLS 的 第一版 ,而当您查看 overview page 时,您会注意到 JLS 的第三版 是描述 Java6 行为的正确版本。值得了解历史背景,即对于 Java5,Java 内存模型已经完全重写,所以我们不是在谈论 Java 语言规范的三个版本之间的微小变化。

从 Java 7 版本的 Java 虚拟机规范开始,不再有 JLS 部分的副本,因此不存在再次不同步的风险。 Java 内存模型的权威来源是 language specification’s chapter.

它根本不使用术语“工作内存”或“主副本”,这是一件好事,因为认为 JVM 的状态在主内存中具有某种绝对真理是错误的内存。

如果您想了解更多有关 JLS 或 JVMS 的信息,您应该从 overview page 开头的最新规范开始,并且只有当您有理由认为可能存在历史问题时您必须了解的差异,请参阅较旧的规范。