针对不同Java版本的源代码之间的性能差异?

针对不同Java版本的源代码之间的性能差异?,java,Java,我有一个1.5兼容的Java源代码,它将只在1.8虚拟机上运行,我想知道在编译过程中以1.8为目标而不是旧版本是否有益 1.5和1.8之间会有性能差异吗? 是否有任何相关的文档或更改日志,我可以查看?? 除了性能之外,您应该考虑1.5个以来固定的数千个bug修复程序。 1.8上也有新的API,如javafx、NIO、lambas Oracle宣布Swing不再更新,所以如果你的应用程序有GUI,你应该考虑开始移植到JavaFX. 顺便说一句,在oracle站点中,当您下载一个新的jdk时,还有

我有一个1.5兼容的Java源代码,它将只在1.8虚拟机上运行,我想知道在编译过程中以1.8为目标而不是旧版本是否有益

1.5和1.8之间会有性能差异吗?
是否有任何相关的文档或更改日志,我可以查看??

除了性能之外,您应该考虑1.5个

以来固定的数千个bug修复程序。 1.8上也有新的API,如javafx、NIO、lambas

Oracle宣布Swing不再更新,所以如果你的应用程序有GUI,你应该考虑开始移植到JavaFX.


顺便说一句,在oracle站点中,当您下载一个新的jdk时,还有一个指向它的changelog的链接,因为您所指的已编译Java代码是Java字节码,使用新的JVM版本(1.8)运行旧的应用程序应该可以提高应用程序的性能,而无需重新编译字节码


您可以查看Oracle官方文档,了解更改的内容。

我通常将编译设置为1.7。新的lambda语法以及java8的其他特性都很好,但是我遇到的与java7的兼容性问题要小得多,这也是我所习惯的

如果您使用VM在自己的环境中工作,并且您知道您不必依赖最终会出现问题的框架,那么一定要从Java8开始。 您也可以查看官方文档,但维基百科实际上提供了一个很好的更改日志:
javac几乎没有进行任何优化。它所做的主要优化是不断的内联,而且一直都是这样


区别完全在于JVM。在Java 8中,您有更多的选项来编写相同的代码,这意味着您可以重新编写代码以提高效率。

我发现这讨论了Java 7与早期版本的兼容性。它只提到了
invokedynamic
字节码作为版本7和版本6之间的(字节码)差异。由于字节码实际上变化不大,所以版本5字节码与版本8字节码对性能的影响可以忽略不计。

关于错误修复的观点很好,但我更喜欢为不同目标生成的字节码之间的性能差异。该应用程序没有GUI。Thre是一个新的垃圾收集器,从Java1.6开始更高效。热点也被改写为x64。其他信息是我猜更多的甲骨文内部秘密,你只能通过自己做一些测试来比较,但是为新目标生成的字节码会“更好”吗?我反编译了几个类,当目标是1.5和1.8时,字节码之间肯定存在差异。我已经看过JDK技术日志,但是如果存在的话,可能会有一个特定于javac中与性能相关的更改的摘要版本。它不会有太大的区别,可能会有潜在的区别,但不会太大,甚至可能不明显。如果您将更改代码以利用新的优化数据结构等,情况会有所不同……将来可能会以一些小的方式,但不会很多。例如,Java 9将改变字符串连接的编译方式,以使用InvokedDynamic,这仅在针对Java 7及以上版本时可用。
InvokedDynamic
是(IIRC)自引入JVM以来字节码唯一真正(或至少:唯一重要)的更改,因此绝对值得一提。但我不确定这对性能有什么影响。你提到它们“微不足道”,但是。。。性能差异到底在哪里?它们会有多大?根据
invokedynamic
的原因,实际上是性能差异。不是Java性能,而是JVM上运行的其他动态语言。您是在问Java 8类文件是否比Java 8 JVM上的Java 5类文件快,还是Java 8 JVM上的Java 8类文件比Java 5 JVM上的Java 5类文件快?@meriton第一个问题