转换字节代码以使用不同的JRE运行

时间:2014-01-23 18:28:51

标签: java bytecode

有没有办法将使用某个JDK版本生成的类从一个供应商转换为另一个供应商的类,而不反编译它们?操作系统保持不变。

1 个答案:

答案 0 :(得分:1)

Java X编译器生成的所有类文件都将与Java X,X + 1,X + 2等JVM兼容。所以唯一的问题是你是否可以使它与早期的JVM兼容。

这样做的难度取决于该类文件版本中引入的新功能以及编译器如何同意使用它们。在版本51.0(对应于Java 7)的情况下,很容易回到50.0(Java 6)。 51.0中引入的唯一新功能是invokedynamic支持,因此除非您的编译器使用它,否则只需更改类文件中的版本号即可。标准的javac不使用invokedynamic,尽管可以想象替代编译器可以。

请注意,标准库也会从版本更改为版本。使用Java 7中的Try With Resources功能的代码将无法在Java 6 JVM上运行,因为它需要库支持。