我是否应该始终使用最新的 javac 编译器编译 Java 代码?

Should I always compile Java code with latest javac compiler?

我要将 tomcat 安装从 6.0 版升级到 8.5 版,并将 JVM 从 6 升级到 8。我们的 java 代码是用 java 编译的目前为 6。

我知道在最新的 JVM 上 运行ning java 代码在性能方面总是一个好主意(更不用说安全方面了)。这样,与 JVM 6 相比,使用 java 1.6 编译的某些代码在 JVM 8 上可能 运行 更快。

但是编译呢?使用 java 8 编译器编译用 java 6 编写的代码(即仅使用 java 6 功能)是否有任何收获? IE。当代码是用 java 8(目标 8)而不是 java 6 编译时,为了在 JVM 8 上用 java 1.6 运行 编译而编写的代码会更快吗?与 java 6 相比,来自 java 8 的字节码是否优化?

关于目标标志。通过使用针对 java 6 的 java 8 编译器编译 java 6 代码(当代码在 JVM 6 上仍然是 运行 时),与如果代码是用 java 6 编译器编译的?

如您所知,使用最新版本的语言编译 Java 代码没有真正的要求。由你决定。

需要考虑的共同点:

  • 依赖库和框架的兼容性问题
  • 目标 JVM 版本上的兼容性 issues/unsupported 二进制版本
  • 较新 Java 版本中的已知性能(或其他改进)。
  • 向后兼容性 - 使用较新的 Java(例如 8)编译的代码可能并不总是能够在较旧的 JVM(例如 6)上执行。

我会(并鼓励您)查看发行说明,了解新 JVM 版本中引入了哪些更改、改进、兼容性限制等。

Is anything gained by compiling java 6 code with a java 8 compiler targeted to java 6 compared to if the code was compiled with a java 6 compiler?

没有

绝对没有性能提升,因为 java 编译器不执行 任何 类型的优化,即使是明显的优化也不行。

一旦您的应用程序 运行.

,任何可以对 javac 生成的字节码执行的优化都由 JIT 引擎完成

编辑:查看 pveentjer 评论,javac 执行了一些简单的优化(例如恒定分辨率)。但我仍然相信关于 6 和 8 之间差异的答案仍然是 "no"。