我一直想知道Java SE 6中吹捧的性能改进 - 它是在编译器还是运行时?换句话说,由JDK 6编译的Java 5应用程序是否会在JSE 5下看到改进运行(表明改进的编译器优化)?JDK 5编译的Java 5应用程序是否会在JSE 6下看到改进运行(表明改进的运行时优化)?
我注意到,在完全相同的代码库下,JDK 6下的编译几乎是JDK 5下的两倍.我希望至少有一些额外的时间花在编译器优化上,希望能够带来更高性能的JAR和WAR.Sun的JDK信息并没有真正详细说明他们所做的性能改进 - 我认为它有点来自A栏,有点来自B栏,但我想知道哪个是更大的影响力.有谁知道在JDK 6和JDK 5上做过的任何基准测试?
从Java源代码到字节码编译的javac几乎不做任何优化.实际上,优化通常会使代码实际上运行得更慢,因为更难分析以便以后进行优化.
生成的1.5和1.6代码之间唯一的显着区别是,使用-target 1.6添加有关堆栈状态的额外信息,以便更轻松,更快地进行验证(Java ME也可以这样做).这只会影响类加载速度.
真正的优化部分是将字节码编译为本机代码的热点编译器.甚至在某些更新版本上也会更新.在Windows上,默认情况下,较慢的客户端C1版本的热点在JRE中分发.服务器C2热点运行得更快(在java命令行上使用-server),但启动速度较慢并且使用更多内存.
库和工具(包括javac)有时也会完成优化工作.
我不知道你为什么发现JDK 6编译代码比JDK 5慢.在设置方面有一些细微的差别吗?