Java编译器:Java语言应该如何映射到JVM指令?

Dag*_*ang 5 java compiler-construction

Java语言中的构造语义由Java语言规范定义,但它们不是JVM指令.那么,是否有可能严格定义规范以防止错误实现Java编译器?或者Java语言和JVM指令之间的映射非常简单,没有必要担心这个问题?

dim*_*414 6

它会破坏将语言与字节码分离的大部分内容,以便将Java代码清晰地映射到JVM指令.相反,编译器可以自由地确定哪些指令最能代表所提供的源,以便优化实际运行的效率.

这确实意味着编译器可能会做错事,但一般来说,你可以相信像Oracle这样的主要编译器正在做正确的事情; 他们经受了很多考验.


Mar*_*lis 2

Java 语言中构造的语义是由 Java 语言规范定义的,但它们不是根据 JVM 指令定义的。那么,是否有可能该规范没有被严格定义以防止Java编译器的错误实现?

当然是。Java 语言规范的后续版本使用比以前版本更正式的表示法。这应该有助于减少歧义和误解的可能性,但任何主要用英语编写的语言规范都容易被误解。

或者Java语言和JVM指令之间的映射非常简单,无需担心这一点?

我认为“直接”是一种主观衡量标准。:o) 当然,这比我最初预期的更简单。

编译器(javac)本身似乎并没有在优化方面做太多事情,例如参见这个问题。大多数优化实际上是由 JVM 在运行时完成的(通过 HotSpot)。

其他编译器实现可能会进行更多优化。此外,还有一些字节码处理器(例如 ProGuard)可以对字节码进行优化。