Java 6在JDK,JVM或两者中的性能都有所提高吗?

我一直在想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上做过的任何基准测试?

我没有听说过编译器的改进,但是已经发布了关于运行时性能改进的大量信息。

迁移指南:

[ http://java.sun.com/javase/6/webnotes/adoption/adoptionguide.html%5D

绩效白皮书:

[ http://java.sun.com/performance/reference/whitepapers/6_performance.html%5D

从Java源代码到字节码编译的javac几乎不做任何优化。 实际上,优化通常会使代码实际上运行得更慢,因为更难分析以便以后进行优化。

生成的1.5和1.6代码之间唯一的显着区别是,使用-target 1.6添加了有关堆栈状态的额外信息,以使validation更容易和更快(Java ME也可以这样做)。 这只会影响类加载速度。

真正的优化部分是将字节码编译为本机代码的热点编译器。 甚至在某些更新版本上也会更新。 在Windows上,默认情况下,较慢的客户端C1版本的热点在JRE中分发。 服务器C2热点运行得更快(在java命令行上使用-server),但启动速度较慢并且使用更多内存。

库和工具(包括javac)有时也会完成优化工作。

我不知道你为什么发现JDK 6编译代码比JDK 5慢。在设置方面有一些细微的差别吗?

它几乎100%的运行时间。 虽然一些基本的编译技巧可能会进入Java编译器本身,但我不认为Java 1.5和1.6之间有任何重大改进。

新的java虚拟机中有很多新的改进和优化。 因此,您将看到改进性能的主要部分是使用版本6 jvm运行java。

使用Java 6 JDK编译旧的Java代码可能会产生更高效的代码,但主要的改进在于虚拟机,至少这是我注意到的。