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

时间:2008-09-18 14:30:02

标签: java performance comparison benchmarking versions

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

4 个答案:

答案 0 :(得分:7)

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

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

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

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

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

答案 1 :(得分:3)

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

迁移指南:

[http://java.sun.com/javase/6/webnotes/adoption/adoptionguide.html]

效果白皮书:

[http://java.sun.com/performance/reference/whitepapers/6_performance.html]

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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