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

4 回答 4

7

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

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

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

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

我不知道您为什么发现 JDK 6 编译代码比 JDK 5 慢。设置是否有一些细微差别?

于 2008-09-18T14:40:49.107 回答
3

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

迁移指南:

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

性能白皮书:

https://www.oracle.com/java/technologies/javase/6performance.html

于 2008-09-18T14:38:26.400 回答
1

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

于 2008-09-18T14:34:12.510 回答
1

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

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

于 2008-09-18T14:38:12.390 回答