将 Java 7 编译代码升级到 Java 8 有什么好处吗?

2022-08-31 08:36:16

我有一个使用Java 7编写的旧应用程序。它在Java 8 JRE中运行良好。我不打算重写任何代码来利用Java 8的功能。将编译后的代码升级到最新的 Java 8 JDK 是否有任何技术优势?

需要明确的是,代码目前是用Java 7编译的,并且已经使用最新的Java 8 JRE运行。它应该已经从Java 8运行时的改进中受益。这个问题是,使用版本 8 进行编译并使用 Java 8 编译的字节码运行是否会获得任何好处。


此外,我不关心非技术性的好处,如开发人员的工作效率。我认为这些很重要,但不是这个问题的重点。我要求的是没有开发团队的生产代码。它纯粹处于维护模式。


答案 1

如果我正确地理解了这个问题,你想知道 Java 8 中生成的字节码是否比 Java 7 中的“更好”。javac

答案可能不是,他们不断修复编译器中的错误,这有时会导致更有效的字节码。但是,据我所知,您不会从这些Java 8修复中看到任何显着的加速,更改日志仅列出了版本之间的2个主要更改。

Oracle网站很糟糕,我似乎无法获得与版本之间相关的错误修复列表,但这里有一个来自OpenJDK的非详尽无遗的错误。我能设法找到的大多数都是修复错误的。因此,通过更新到Java 8,由于更正确地遵循JLS,它有可能不再编译,并且字节码几乎没有“改进”。javacjavac


答案 2

主要好处是Java 8具有最新的错误修复,因为Java 7没有公开更新。

此外,如果您要在Java 8 JVM上运行代码,那么您可能只安装了一个版本的Java。

Java 8可能更快,并且它对G1等新功能有更好的支持。但是,对于您的用例,它可能更慢,因此了解它的唯一方法是对其进行测试。

将编译后的代码升级到最新的 Java 8 JDK 是否有任何技术优势?

如果你问在Java 8编译器中重新编译Java 7代码是否有任何好处,答案是;几乎没有。

唯一微妙的区别是Java API存在细微的差异,因此Java 8编译器可能会发现Java 7可能存在非常细微的差异。

其他细微的区别是文件开头的幻数,可能是常量池的顺序。字节码基本上是相同的,甚至在Java 7中也存在对lambdas的支持,但并没有以这种方式使用。invokedynamic


推荐