代码之家  ›  专栏  ›  技术社区  ›  Adrian

Java 6在JDK、JVM或两者中的性能改进吗?

  •  3
  • Adrian  · 技术社区  · 16 年前

    我一直在想JavaSE 6中的性能改进——是在编译器还是运行时?换句话说,JDK 6编译的Java 5应用程序会看到JSE 5下的改进运行(指示改进的编译器优化)吗?JDK 5编译的Java 5应用程序是否会看到JSE 6下的改进运行(指示改进的运行时优化)?

    我注意到,在jdk 6下编译所需的时间几乎是在jdk 5下编译相同代码库所需时间的两倍;我希望至少有一部分额外的时间用于编译器优化,希望会导致更高性能的jar和战争。Sun的JDK信息并没有详细介绍他们所做的性能改进——我假设这是A列的一点,B列的一点,但我想知道哪一个影响更大。有人知道JDK6和JDK5的基准测试吗?

    4 回复  |  直到 16 年前
        1
  •  3
  •   tovare    16 年前

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

    迁移指南:

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

    绩效白皮书:

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

        2
  •  7
  •   Tom Hawtin - tackline    16 年前

    从Java源编译到字节码的Javac几乎没有优化。实际上,优化通常会使代码实际运行速度变慢,因为在以后的优化中很难进行分析。

    生成的代码在1.5和1.6之间唯一的显著差异是,与目标1.6相关的额外信息被添加到堆栈的状态,以使验证变得更容易和更快(Java ME也这样做)。这只会影响装载速度。

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

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

    我不知道您为什么发现JDK6比JDK5编译代码慢。在设置上有什么细微的差别吗?

        3
  •  1
  •   jsight TaherT    16 年前

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

        4
  •  1
  •   Hans Sjunnesson    16 年前

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

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