2008-09-18 50 views
3

我一直想知道在Java SE 6中推广的性能改进 - 它是在编译器还是运行时?换句话说,由JDK 6编译的Java 5应用程序是否会在JSE 5下看到改进(指示改进了编译器优化)?由JDK 5编译的Java 5应用程序是否会在JSE 6下看到改进(指示改进的运行时优化)?Java 6在JDK,JVM或两者上的性能有所提高吗?

我注意到,在JDK 6下编译所花费的时间几乎是在JDK 5下完成相同代码库的两倍;我希望至少有一些额外的时间花在编译器优化上,希望能够带来更多性能的JAR和WAR。 Sun的JDK信息并没有详细说明他们已经取得的性能改进 - 我认为它在A列中稍微有点儿,而B列中有一点,但我想知道哪个影响更大。有人知道在JDK 6和JDK 5上做的任何基准吗?

回答

1

它几乎100%的运行时间。尽管一些基本的编译技巧可以将其编译到Java编译器本身中,但我不相信Java 1.5和1.6之间有任何显着的改进。

1

在新的Java虚拟机中有很多新的改进和优化。所以当你使用版本6的jvm运行java时,你会看到性能提升的主要部分。

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

7

javac的,这从Java源代码编译成字节码,确实几乎没有优化。实际上,优化通常会使代码实际运行速度变慢,因为以后的优化难以分析。

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

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

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

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