如果一个新的(java 11)目标版本将在java 11上运行,而源代码将保持不变(java 8),那么从性能角度重新编译一个项目是否有意义?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>在较新的JVM上运行java 8字节码有哪些缺陷?
更新:
代码优化器是编译阶段的一个阶段,其中:
阅读更多:https://www.guru99.com/compiler-design-phases-of-compiler.html
因此,我想知道不同编译器(基准测试)之间是否存在很大的差异,最好在编译阶段列出所有优化的完整列表。
发布于 2019-10-08 13:03:51
不,javac编译器不会进行太多的优化,因为JIT负责运行时的大多数优化,所以您将得到非常相同的字节码。但是,类文件将被标记为Java 11,因此您将无法在较低版本上运行它。
Java是向后兼容的,所以在新版本上运行Java 8字节码没有什么特别之处。
当然,在较新的JVM上运行Java 8字节码可以在JIT中使用(可能的)改进的动态优化,因此您更有可能只使用后面的JVM就可以获得更好的性能,而无需进行任何额外的编译。
正如Johannes的视频所显示的,为了内存和速度优化String总是很有兴趣的,因为它们是Java中最常用的对象。然而,它仍然是一个微基准,大多数差异来自于用Java 11编译和运行的代码,而不是用Java 8编译和运行的代码。
我试图找到可以访问recompilation,的消息来源,但很快就找不到任何东西。因此,在有证据表明非微基准将从重新编译到Java11字节码(从实际到理论)受益之前,我将其归类为“性能伏都教”。
https://stackoverflow.com/questions/58286884
复制相似问题