在1.6 VM上运行“-target 1.5”生成的Java类文件的性能影响?

在几个月前将我的整个设置从Java 1.5迁移到1.6(J2EE,Tomcat)之后,我才意识到Maven仍然配置为通过Sun的javac参数“-target 1.5”生成针对1.5的类文件。 将“-target 1.5”更改为“-target 1.6”时,我可以期待任何性能提升吗?

它不应该有太大的区别。 1.6文件可以有堆栈映射/表结构,提高字节码validation速度(Apache Harmony只使用更智能的算法)。

如果你要去1.4,那么类常量的初始加载会稍微慢一点,但考虑到一个类加载多长时间这是无关紧要的(一种新forms的ldc字节码取代了Class.forName ,但结果存储在一个静态场。)

一般来说没关系。 运行时编译器是重要的位,可以生成相同的机器代码。 在过去,已经对javac进行了减少优化,以便不破坏运行时编译器的代码,但这与-target标志无关。

Java 1.6使用不同的类文件格式 ,这简化了字节码validation的过程。 因此,如果使用新的类文件格式,启动时间应该会有所改善。

我不明白为什么会有性能差异。 1.5和1.6的类格式之间没有重大差异。 如果没有其他更改,则指定目标将更改生成的类中的classversion id。