Java 6的性能提升是在JDK、JVM还是两者都有?

3
我一直在想,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个回答

7

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

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

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

此外,库和工具(包括javac)有时也会进行优化工作。

我不知道为什么您发现JDK 6编译代码比JDK 5慢。是否设置上有微妙的差异?


4

1

几乎完全是运行时。虽然一些基本的编译技巧可能会被包含在Java编译器中,但我认为Java 1.5和1.6之间没有任何显著的改进。


1
新版Java虚拟机有许多新的改进和优化。因此,在使用6版本JVM运行Java时,您将看到性能得到了提升。
使用Java 6 JDK编译旧的Java代码可能会产生更有效的代码,但主要的改进在于虚拟机,至少这是我注意到的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接