我有一个1.5兼容的Java源代码,它将完全在1.8 VM上运行,并且想知道在编译期间是否有利于1.8版本而不是旧版本。针对不同Java版本的源代码之间的性能差异?
1.5和1.8之间会有任何性能差异吗? 是否有任何相关的文档或更改日志可用,我可以看看?
我有一个1.5兼容的Java源代码,它将完全在1.8 VM上运行,并且想知道在编译期间是否有利于1.8版本而不是旧版本。针对不同Java版本的源代码之间的性能差异?
1.5和1.8之间会有任何性能差异吗? 是否有任何相关的文档或更改日志可用,我可以看看?
javac
几乎没有优化。它所做的主要优化是不断内联,并一直这样做。
区别完全在于JVM。在Java 8中,您可以有更多的选项来编写相同的代码,这意味着您可以重新编写代码以提高效率。
除了性能,你应该考虑其中已得到修复,因为1.5
也有1.8的新API,如JavaFX的,NIO,lambas千元bug修复。
Oracle宣布swing不会再更新,所以如果你的应用程序有GUI,你应该考虑开始寻找移植到javafx。
在甲骨文网站顺便说一句,当你下载一个新的JDK也有一个链接的更新日志
有关错误修复的好处,但我更关心为不同目标生成的字节码之间的性能差异。 该应用程序没有GUI。 – orom
Thre是从Java 1.6开始的更高效的新垃圾收集器。热点也被重写为x64。其他信息是我猜想更多的甲骨文的内部秘密,你只能通过自己做一些测试来比较 –
既然你指的是Java字节代码,运行旧的应用程序有一个新的JVM版本编译的Java代码(1.8)应该可以提高应用程序的性能,而不需要重新编译字节码。
您可以查看关于JDK 8 performance improvement的Oracle官方文档,以了解发生了什么变化。
我通常将编译设置为1.7。 Java 8的其他特性中的新lambda语法非常好,但是我遇到了java 7的兼容性问题,而这正是我习惯的。
如果您使用虚拟机自己工作,并且您知道您不需要依赖于最终会出现问题的框架,那么请尽量使用java 8. 您也可以查看官方文档,但维基百科实际上提供了一个很好的更改日志imo: https://en.wikipedia.org/wiki/Java_version_history
我发现this Oracle source讨论了Java 7与早期版本的兼容性。它仅提到invokedynamic
字节码作为版本7和6之间的(字节码)差异。由于字节码并没有真正改变太多,所以版本5字节码与版本8字节码对性能的影响可以忽略不计。
您是问在Java 8 JVM上Java 8类文件是否比Java 5类文件更快,或者Java 8 JVM上的Java 8类文件是否比Java 5 JVM上的Java 5类文件更快? – meriton
@meriton第一个 – orom