JVM工作内存是否与CPU缓存相同

yqhsw0fo  于 2022-11-07  发布在  其他
关注(0)|答案(2)|浏览(188)

JVM规范指出,每个线程都有自己的工作内存,并列出了几个操作,包括使用、分配、加载、读取、存储、写入、锁定、解锁。工作内存与CPU缓存相同,还是与线程堆栈相同?
该规范还指出,“当线程执行程序时,它对这些工作副本进行操作。”因此,当JVM执行指令将操作数堆栈上的两个值相加时,它会将这两个操作数从堆栈中弹出并相加。在这种情况下,这些弹出的操作数的工作副本是什么?在哪里?

qxgroojn

qxgroojn1#

您看到的是最早的规范still online at Oracle(在页面底部)。我们说的是自本文档发布以来至少已经过去了16年。但即使在过时的文档中,您也会发现在发布时已经过时的章节。
beginning of the chapter所述。
它是对James Gosling、Bill Joy和Guy Steele编写的 The Java™ Language Specification 第一版第17章的最小修改。
请注意,它说它是基于JLS第一版,而当您查看overview page时,您会注意到JLS第三版是描述Java 6行为的正确版本。了解历史背景是有价值的,即对于Java 5,Java内存模型已被完全重写,因此我们不讨论Java语言规范的三个版本之间的微小变化。
从Java虚拟机规范的Java 7版本开始,不再有JLS部分的副本,因此不再有不同步的风险。Java内存模型的权威来源是language specification’s chapter
它根本没有使用术语“工作内存”或“主副本”,这是一件好事,因为认为JVM的状态在主内存中具有某种绝对真理是错误的。
如果你想了解更多关于JLS或JVMS的信息,你应该从最新的规范开始,在overview page的开头,只有当你有理由认为可能存在你必须知道的历史差异时,才参考旧的规范。

5fjcxozz

5fjcxozz2#

不。你可以访问工作内存。你实际上并没有访问缓存。你不应该知道里面有什么,它会提前获取和保存CPU缓存中的先前值。如果处理得当,缓存应该是不可见的,只是在后台加速。实际的工作内存存储工作的东西,等等。

相关问题