Java语言中的构造的语义是由Java语言规范定义的,但它们不是JVM指令。那么,是否有可能没有严格定义规范以防止Java编译器的错误实现?或者Java语言和JVM指令之间的映射非常简单,没有必要担心吗?
发布于 2013-12-05 17:52:48
Java语言中的构造的语义是由Java语言规范定义的,但它们不是JVM指令。那么,是否有可能没有严格定义规范以防止Java编译器的错误实现?
是的,当然。语言规范的后期版本比以前的版本使用更多的正式表示法。这将有助于减少歧义和误解的可能性,但任何语言规范,主要是用英语编写的,都容易出现误解。
或者Java语言和JVM指令之间的映射非常简单,没有必要担心吗?
我认为“直截了当”是一种主观尺度。当然,这比我最初预期的要简单得多。
编译器(javac)本身似乎在优化方面做得不多,例如,参见this question。大多数优化实际上是由JVM在运行时(通过HotSpot)完成的。
其他编译器实现可能会进行更多的优化。此外,还有一些字节码处理器(如ProGuard)对字节码执行优化。
发布于 2013-12-05 16:32:13
这将克服将语言与字节码分离的大部分问题,因为要将Java代码清晰地映射到JVM指令。相反,编译器可以自由地确定哪些指令最能代表所提供的源代码,以便优化实际运行的效率。
这确实意味着编译器可能会做错误的事情,但是一般来说,您可以相信像Oracle这样的主要编译器所做的事情是正确的;它们需要经过大量的测试。
https://stackoverflow.com/questions/20405333
复制相似问题