【发布时间】:2018-05-13 01:07:57
【问题描述】:
Java 语言规范是否要求将 Java 编译为 Java 字节码?
据我了解,情况并非如此:
编译时间通常包括 将程序翻译成与机器无关的字节码 [representation.
[...]
Java 编程语言通常编译为字节码指令 Java 虚拟机规范、Java SE 中定义的集合和二进制格式 9 版。
(强调我的)
我在规范中找不到任何其他提及“字节码”或“字节码”的地方。
这是否意味着所有字节码操作在技术上都没有被 JLS 定义的“Java 语言”所涵盖,并且在技术上依赖于实现细节?
【问题讨论】:
-
有待验证,但这可能是在 JVM 规范中,而不是在语言规范中。另外,从 Java 9 开始,JShell(我认为是这个名字)允许在 shell 中执行 java 代码,而无需编译。
-
@AxelH "this" 是字节码操作?我不认为 JVM 规范可以指定 Java 必须 被编译为 Java 字节码。
-
确实,Java 语言可以以任何方式编译。尽管JVM specification 确实涵盖了字节码。 “Java 虚拟机对 Java 编程语言一无所知,只知道一种特定的二进制格式,即类文件格式。类文件包含 Java 虚拟机指令(或字节码)和符号表,以及其他辅助信息。”
-
@AxelH 我还没有检查过 JShell,但这不就是 JDK 发行版的产物吗?此外,仅仅因为没有明确的编译为字节码的步骤并不意味着 Jshell 不能这样做。
-
@phant0m 我发现在使用它的工具上找到字节码规范更符合逻辑。你能详细说明“”this“是字节码操作吗?”我不明白。 (JShell 仅供参考,这很可能是编译的,但以他自己的方式)
标签: java bytecode jls language-implementation