Java内存模型只是Java范围的还是实际上是JVM范围的?

Java内存模型只是Java范围的还是实际上是JVM范围的?,java,jvm,java-memory-model,Java,Jvm,Java Memory Model,我看到它总是被称为Java内存模型,但到目前为止,我本能地认为它适用于整个JVM生态系统 它是否只适用于Java创建的应用程序之间,或者任何字节码JVM兼容的可执行文件是否也享受其保证 我通过“内存模型”查阅了JVM规范,但找不到那么多。另一方面,java规范对其进行了详尽的描述,给我的印象是内存模型是特定于java的 感谢从技术上讲,Java内存模型只针对Java,并引用Java构造(同步、易失、最终…)。但是JMM的实施是通过特定的字节码指令委托给JVM的 例如,同步块转换为monitore

我看到它总是被称为Java内存模型,但到目前为止,我本能地认为它适用于整个JVM生态系统

它是否只适用于Java创建的应用程序之间,或者任何字节码JVM兼容的可执行文件是否也享受其保证

我通过“内存模型”查阅了JVM规范,但找不到那么多。另一方面,java规范对其进行了详尽的描述,给我的印象是内存模型是特定于java的


感谢

从技术上讲,Java内存模型只针对Java,并引用Java构造(同步、易失、最终…)。但是JMM的实施是通过特定的字节码指令委托给JVM的

例如,同步块转换为monitorenter/monitorexit字节码指令

因此,任何与JVM兼容的语言在理论上都可以定义特定的内存模型(只要它可以基于JMM进行描述),并生成适当的字节码


在实践中,有一些直接的等价关系,例如Scala的
@volatile
或Clojure的
volatile mutable

无法提供深入的技术解释,但我的理解是,任何生成的字节码,无论使用何种语言,都将在JVM中运行,并具有引用抽象、类型安全性、,沙箱…公平地说,整个JVM规范中都有对JLS(Java语言规范)的引用,因此您所说的可能就是这种情况。内存模型的大部分保证必须由JVM提供。但有些需要编译器配合——有些优化是它无法做到的(例如,重新排序操作)。但任何针对JVM的健全语言都应该提供与Java内存模型同等的保证。