【问题标题】:Are JVM languages bound by the Java Memory Model or just the Java Programming Language?JVM 语言是受 Java 内存模型约束还是仅受 Java 编程语言约束?
【发布时间】:2012-07-02 13:49:11
【问题描述】:

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

【问题讨论】:

  • @T.J.Crowder:这也是我的第一反应,但内存模型在涉及多个线程时才真正相关。
  • 内存模型是关于定义多线程如何与内存交互的,这在多核和多处理器系统中非常重要,而且非常微妙,这就是为什么它被归档在多线程以及java和jvm下.
  • 这个问题与并发无关,因为它是关于源语言和JVM实现的。除此之外,并发并不重要,请参阅@T.J.Crowder 关于大型结构的评论。更多的是关于多个 references 再次与并发无关!
  • 为什么人们投票结束这个问题?我会很感激作为评论的解释?
  • @JoachimSauer:是的,我们使用不同的“内存模型”,你对它的理解appears to be how it's used in the JLS 我会不会使用“记忆模型”来描述这种行为,但他们就是这样做的,所以......

标签: java multithreading jvm


【解决方案1】:

严格来说,Java 内存模型 is part of the Java Language Specificationthe Java Virtual Machine Specification 相对。但是,JVM 规范在很大程度上依赖于 JLS 来指定操作的细节,并且 Java 内存模型适用于每个执行的字节码,无论它最初是从哪种语言编译的。因此,所有 JVM 语言都绑定到它(或从中受益,取决于您如何看待它)。

【讨论】:

  • 理论上,语言实现可以插入额外的线程相关代码,甚至可以将表面上的单线程代码拆分为多个线程。
  • 您发布到 Java 语言规范的链接,据我所知,语言规范独立于 JVM 规范,或者我可能错了。
  • @ams:JVM specification 与语言规范是分开的,但它严重依赖它。在整个 JVM 规范中,您会发现“JLS §x.y.z”形式的引用,因为归根结底,JVM 是专门为提供启用 Java 编程语言的运行时环境而设计的。当然,我们已经超越了这一点,但这是基础...... :-)
  • @T.J.Crowder:我同意。这些天来,JMM 的技术细节可能应该转移到 JVM 规范中,因为它们确实是符合 JVM 的要求(而不是由 Java 编译器 javac 处理)。但是在 JSR-133 流行的时候,这种区分并不像今天应该的那么严格。
【解决方案2】:

内存模型适用于整个 JVM,而与编写字节码的源语言无关。当它是字节码时,它就是字节码。

【讨论】:

  • 内存模型和垃圾收集等的技术行为是特定于 JVM 实现的。他们试图收紧规范,但对于垃圾收集例程的解释和不同实现仍有一些回旋余地。
  • @JarrodRoberson:是的,但是相同的模型适用于整个特定 JVM,并且它必须与符合标准的 VM 中的two relevantspecifications 定义的行为相匹配。
猜你喜欢
  • 2011-07-20
  • 1970-01-01
  • 2019-07-10
  • 2013-10-11
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
相关资源
最近更新 更多