Java运行时编译

标签 java compilation jvm

我经常遇到针对 Java Y 编译的 Java X 运行时这个短语。有人可以解释一下这句话的实际含义吗?是否存在 X 必须大于或等于 Y 的条件,或者可以是任何值?对于 JVM 和 JDK,这如何工作?

请原谅我无法理解这里的逻辑。

最佳答案

如果不给出您在哪里读到的示例,就很难确定您真正要问的是什么。

如果显示“为 Java 6 编译”,那么您可以在从 Java 6 及更高版本开始的任何 Java 运行时上安全地使用它,但在 Java 5 运行时及更低版本上,它将失败并出现“不支持的主要类版本”错误。

因此,用您自己的话说,X 确实必须等于或大于 Y。您可以在编译代码时选择要支持的最小 Java 运行时版本。

长期以来,库开发人员都试图保持他们的代码与 Java 5 兼容;直到最近我才看到兼容性最低限度地上升到了 Java 6。针对此类旧的且不受支持的运行时进行编译的原因很简单;它是为了使库能够在已安装和使用的最大数量的运行时上运行。您不能自然地假设每个人都已经升级到现代 Java 运行时,仍然有大量遗留程序需要 Java 5 运行时。

幸运的是,正如 SubOptimal 已经评论的那样,您不必被迫使用 Java 5 JDK 来实际编译 Java 5 兼容性代码;您也可以使用较新的 JDK 来生成与较旧的运行时兼容的字节码。但当然,您不能使用 Java 6 来编译具有 Java 8 功能的代码或生成 Java 8 字节码。

关于Java运行时编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28959435/

相关文章:

java - 如何停止 Beanshell 断言中程序的进一步执行

c++ - "undefined reference to"使用模板时链接器错误

Gwt编译错误: unable to find entry point when it's not in src/main/java

elasticsearch - _JAVA_OPTIONS未设置-Xmx

java - String 类中的 "hash"变量

java - 如何从 Web 容器外部查找 JNDI 数据源?

java - findViewById 从 Activity 返回 null

java - 从文件读取模型时出现 Apache Jena 异常(仅在 Mac 上?)

c++ - { token 之前的预期类名

java - 我应该 `new` 循环内部还是外部的对象?