Java8性能与Java7 我正在通过JNI,开发一个使用C++库的图像处理java 7U80应用程序。

Java8性能与Java7 我正在通过JNI,开发一个使用C++库的图像处理java 7U80应用程序。,java,multithreading,java-8,java-7,Java,Multithreading,Java 8,Java 7,正如我愿意使用Java8U60一样,我只是切换到JDK8并重新启动了所有的单元测试 Java 8u60总持续时间:*35'408[ms]** Java 7u80总持续时间:*29'581[ms]** 在我的例子中,Java7比Java8快17%(相同的代码,代码级别分别为7和8) 我想知道这样的结果是否特定于我的应用程序,或者其他人是否已经注意到从Java7到Java8的性能下降 代码中是否有特别的优化来充分利用Java8 如果什么也做不到,我宁愿用Java 7而不是8实现多线程代码,以保持Ja

正如我愿意使用Java8U60一样,我只是切换到JDK8并重新启动了所有的单元测试

Java 8u60总持续时间:*35'408[ms]**

Java 7u80总持续时间:*29'581[ms]**

在我的例子中,Java7比Java8快17%(相同的代码,代码级别分别为7和8)

  • 我想知道这样的结果是否特定于我的应用程序,或者其他人是否已经注意到从Java7到Java8的性能下降
  • 代码中是否有特别的优化来充分利用Java8
  • 如果什么也做不到,我宁愿用Java 7而不是8实现多线程代码,以保持Java 7已经获得的性能提升。

    针对WLS 12.1.3运行resp启动了21个SOAPUI(并行)测试。在我的测试环境中使用Java7u51(*)和Java8u60

    下面的测试结果(在出现问题时包括屏幕截图)。

    总而言之:SOAPUI时间只是每个过程的SOAPUI执行时间,而JMX时间(每个过程之间的累积时间)是花在应用程序关键部分上的时间
    JMX度量是计算时间(我尝试最小化的时间)。我不会依赖SOAPUI指标,因为我不知道它是如何精确计算的

    根据SOAPUI,JDK 7u51比JDK 8u60快6.7%。
    根据JMX,JDK 7u51比JDK 8u60快15.6%。

    后者(向我)证实了我在单元测试中观察到的趋势-相同的结果。尽管这些测试可能不是用来评估JVM性能的测试,但我想在我的案例场景中,最好还是停留在JDK7上,因为在我的案例中,性能方面很重要

    Java7
    Pass1
    SOAPUI:22'324[ms]-JMX:16'286[ms]

    Pass2
    SOAPUI:24'129[ms]-JMX:33'510[ms]

    Pass3
    SOAPUI:22'170[ms]-JMX:49'923[ms]

    总计
    SOAPUI:68'623[ms]
    (JMX:49'923[ms])

    Java8
    Pass1
    SOAPUI:25'150[ms]-JMX:19'767[ms]

    Pass2
    SOAPUI:24'564[ms]-JMX:39'702[ms]

    Pass3
    SOAPUI:23'846[ms]-JMX:59'172[ms]

    总计
    SOAPUI:73'560[ms]
    (JMX:59'172[ms])

    (*):没有时间在我的单元测试中安装Java 7u60

    屏幕截图


    除非正确使用,否则使用并行流的速度会较慢。假设您的单元测试没有运行,您可以完全忽略这些数字。@BoristheSpider我相信OP还没有使用stream,他只是切换了JDK版本,并立即注意到总持续时间的变化。您需要阅读。@VGR,如果是35秒和29秒,它不是一个微基准。单元测试通常是最后一件告诉你性能的事情。它们只执行一次大多数操作,以证明它们不会失败。这与生产环境行为不同(这是有意的),Java8相对于Java7在性能上的真正优势在于多线程,比如说Fork-Join模型。图像是一个好主意,尽管它太小,无法欣赏其价值。