字节码是否取决于创建它的 Java 版本?
最佳答案
If I compiled a java file in the newest JDK, would an older JVM be able to run the .class files?
这取决于三件事:
您所谈论的实际 Java 版本。例如,1.4.0 JVM 可以运行由 1.4.2 编译器编译的代码,但 1.3.x JVM 不能1。
使用的编译标志。有一个
-target
编译器标志告诉它生成将在旧的(目标)JVM 上运行的代码。-source
编译器标志告诉它只接受旧 JVM 的语言特性。 (这种方法并不总是有效,具体取决于您的代码使用的 Java 语言功能。但如果代码编译通过,它应该有效。)类文件使用的库类。如果它使用旧类库中不存在的库类,那么它将无法运行……除非您可以包含一个向后移植这些类的 JAR2。您可以通过使用
-bootclasspath
选项针对旧版 Java 的 API 编译您的代码来避免此问题。
Does the bytecode depend on the version of the java it was created with?
是的,对上面的点取模。
1 - Java 8 JVMS 指出:“JDK 版本 1.0.2
中的 Oracle Java 虚拟机实现支持类文件格式版本 45.0
到 45.3
(含)。JDK 版本 1.1.*
支持 45.0
到 45.65535
(含)范围内的类文件格式版本。对于 k ≥ 2,JDK 版本 1.k
支持 45.0
到 44+k.0
范围内的类文件格式版本。"
2 - 向后移植也可能有问题。例如:1) 依赖 native 代码支持的事物很可能需要您实现该 native 代码支持。 2) 当您在较旧的 JVM 上运行代码时,您很可能需要将任何后向端口 JAR 文件放入引导类路径。
关于java - 如果我用最新的 JDK 编译了一个 Java 文件,旧的 JVM 是否能够运行 .class 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39555828/