我一直想知道 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 6 上进行的任何基准测试吗?JDK 5?

有帮助吗?

解决方案

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

迁移指南:

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

性能白皮书:

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

其他提示

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

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

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

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top