Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用最新java版本重新编译旧java项目的性能优势_Java_Performance_Jvm_Jvm Bytecode - Fatal编程技术网

使用最新java版本重新编译旧java项目的性能优势

使用最新java版本重新编译旧java项目的性能优势,java,performance,jvm,jvm-bytecode,Java,Performance,Jvm,Jvm Bytecode,如果一个项目将在Java11上运行,而源代码保持不变(Java8),那么从性能角度来看,用新的(Java11)目标版本重新编译该项目有意义吗 org.apache.maven.plugins 所以,我想知道不同的编译器(基准测试)之间是否有很大的差异,最好有一个完整的列表,列出在编译阶段发生的所有优化不,javac编译器没有做太多的优化,因为JIT负责运行时的大多数优化,所以您得到的字节码相当相同。除了类文件将被标记为Java11之外,您将无法在较低版本上运行它 Java是向后兼容的,所以在

如果一个项目将在Java11上运行,而源代码保持不变(Java8),那么从性能角度来看,用新的(Java11)目标版本重新编译该项目有意义吗


org.apache.maven.plugins


所以,我想知道不同的编译器(基准测试)之间是否有很大的差异,最好有一个完整的列表,列出在编译阶段发生的所有优化

不,
javac
编译器没有做太多的优化,因为JIT负责运行时的大多数优化,所以您得到的字节码相当相同。除了类文件将被标记为Java11之外,您将无法在较低版本上运行它

Java是向后兼容的,所以在新版本上运行Java8字节码并没有什么特别之处

当然,在较新的JVM上运行Java8字节码允许(可能)在JIT中使用改进的动态优化,因此只需使用较新的JVM而无需任何额外编译,就更有可能获得更好的性能

正如Johannes所说,人们总是对优化字符串的内存和速度感兴趣,因为它们是Java项目中最常用的对象。然而,它仍然是一个微基准,大多数差异来自于使用Java11编译和运行的代码与使用Java8编译和运行的代码


我试图找到可以解决重新编译问题的源代码,但没有找到任何快速浏览的内容。因此,除非有证据表明非微基准会从对Java 11字节码的重新编译中受益(现实的,而非理论的),否则我将把它归为“性能巫毒”一类。

Java 9改变了字符串串联的编译方式。除此之外,这不重要。不,你不会得到相同的字节码。正如我在评论中所说,Java9改变了字符串连接的编译方式(它现在使用invokedynamic)。@JohannesKuhn我说“非常相同”。它当然不会给您带来显著的性能改进。有关它的讨论,请参阅。@JohannesKuhn有什么特别的观点吗?我不想看45分钟的
String
视频,尤其是当我不知道为什么会有链接的时候。你是说这段视频鼓励人们重新编译Java9吗?我不确定我是否完全理解你的观点,但可以肯定。
<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>