JVM语言是否受Java内存模型限制,还是仅受Java编程语言限制?

3

Java的内存模型是Java编程语言的特性还是JVM的特性?JVM语言是否受Java内存模型约束,还是只受Java编程语言的约束?


1
内存模型是关于定义多个线程如何与内存交互的,这在多核和多处理器系统中非常重要,而且相当微妙,这就是为什么它被归类为多线程以及Java和JVM的原因。 - ams
1
这个问题与并发完全无关,因为它所表述的是源语言和JVM实现。此外,并发也无关紧要,参见@T.J.Crowder有关大型结构的评论。这更多地涉及到多个引用,这与并发无关! - user177800
1
为什么有人投票关闭这个问题?我会很感激如果能在评论中解释一下。 - ams
1
@JoachimSauer:是的,我们使用“内存模型”的方式不同,你对它的理解似乎就是JLS中所使用的方式。哇,我不会使用“内存模型”来描述那种行为,但这就是他们所做的,所以... - T.J. Crowder
@JarrodRoberson:实际上,“内存模型”似乎是JLS用于此的术语,请参见我上面的链接。 - T.J. Crowder
显示剩余5条评论
2个回答

8

严格来说,Java内存模型是Java语言规范的一部分,而不是Java虚拟机规范。然而,JVM规范在很大程度上依赖于JLS来指定操作的细节,而Java内存模型适用于执行的每个字节码,无论它最初是从哪种语言编译而来。因此,所有JVM语言都受其约束(或从中受益,这取决于您如何看待它)。


1
理论上,语言实现可以插入额外的线程相关代码,甚至将表面上单线程的代码拆分成多个线程。 - Tom Hawtin - tackline
你发布的Java语言规范链接,据我理解,语言规范独立于JVM规范,或者我对此有误。 - ams
2
@ams:JVM规范与语言规范是分开的,但它在很大程度上依赖于它。在JVM规范中,你会发现形式为“JLS §x.y.z”的引用,因为归根结底,JVM是专门设计为提供运行时环境,使Java编程语言能够运行。当然,我们已经超越了这一点,但这是基础... :-) - T.J. Crowder
@T.J.Crowder: 我同意。现在,JMM的技术细节可能应该被移动到JVM规范中,因为它们确实是符合JVM所需的(而不是由Java编译器javac处理)。但是,在JSR-133当前的时候,区分并不像今天应该那么严格。 - Joachim Sauer

4

内存模型适用于 JVM,无论字节码是用哪种源语言编写的。一旦成为字节码,就是字节码。


从技术上讲,内存模型和垃圾回收等的行为是JVM实现特定的。他们试图加强规范,但仍然存在一些解释和不同垃圾回收例程的实现的余地。 - user177800
@JarrodRoberson: 没错,但该模型适用于特定JVM的整个范围,并且必须符合两个相关规范规范在一致的VM中定义的行为。 - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接