我应该总是使用最新的javac编译器编译Java代码吗?

时间:2017-01-05 11:39:12

标签: java compilation jvm bytecode

我要将tomcat安装从版本6.0升级到版本8.5,并将JVM从6升级到8.我们的java代码现在用java 6编译。

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

但编译怎么样?通过使用java 8编译器编译用java 6编写的代码(即仅使用java 6特性),可以获得任何收益吗?即当使用java 8(目标8)而不是java 6编译代码时,编写用java 1.6编译的代码是否在JVM 8上运行得更快?与java 6相比,java 8的字节码是否优化?

关于目标旗帜。通过使用针对java 6的java 8编译器编译java 6代码(当代码仍在JVM 6上运行时),与使用java 6编译器编译代码相比,可以获得什么?

2 个答案:

答案 0 :(得分:1)

  

与使用java 6编译器编译代码相比,使用针对java 6的java 8编译器编译java 6代码可以获得什么?

没有

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

javac生成的字节码上执行的任何优化都是在应用程序运行后由JIT引擎完成的。

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

答案 1 :(得分:0)

正如您所知,没有真正需要使用该语言的最新版本编译Java代码。这取决于你。

要考虑的共同点:

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

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