在java 1.6中编译并在1.7 jvm下运行的应用程序的性能

在java 1.6中编译并在1.7 jvm下运行的应用程序的性能,java,performance,Java,Performance,我有一个用java 1.6编译的项目,但它是在1.7 jvm的机器上运行的,我想知道如果该项目也用java 1.7编译,是否会有性能改进。一个快速的方法是,您应该按照检查您的项目是否在JDK 1.7中使用了这些性能增强,对吗?(注意:我在这里谈论的是Oracle JDK和JVM。) 如果您的意思是简单地重新编译源文件而不利用Java7中的任何新特性,那么我怀疑您是否会看到性能上的任何重大变化 性能优化已完成: 通过编译器优化字节码,以及 通过JVM,在运行时进行优化,特别是在检测到“热点”(J

我有一个用java 1.6编译的项目,但它是在1.7 jvm的机器上运行的,我想知道如果该项目也用java 1.7编译,是否会有性能改进。

一个快速的方法是,您应该按照检查您的项目是否在JDK 1.7中使用了这些性能增强,对吗?

(注意:我在这里谈论的是Oracle JDK和JVM。)

如果您的意思是简单地重新编译源文件而不利用Java7中的任何新特性,那么我怀疑您是否会看到性能上的任何重大变化

性能优化已完成:

  • 通过编译器优化字节码,以及
  • 通过JVM,在运行时进行优化,特别是在检测到“热点”(JVM的名称,HotSpot)时进行优化
因此,如果您没有使用新的Java 7功能,您将看到的唯一改进是,如果有一些新的字节码级优化是Java 7编译器所做的,而Java 6编译器所没有做的。我没有在中看到任何列出,即使是Java 6,编译器也得到了很好的优化(坦率地说,我认为大部分优化都发生在JVM中;JVM7中的性能改进已经让您受益匪浅)


JVM也不必对类文件格式进行任何重大更改。根据,唯一的二进制兼容性更改是,由于引入了新的字节码,次要版本号发生了更改。但字节码(
invokedynamic
)支持Java 6源代码中没有的功能,因此没有什么可看的。结构没有改变,只是次要的版本号。

您可以参考本博客,了解1.6和1.7之间的性能:这不是回答项目是否必须用java 1.7编译的问题不需要用JDK1.7编译,因为焦点应该是运行时环境本身。