Java 8性能与Java 7对比

12

我正在开发一个图像处理Java 7u80应用程序,通过JNI使用C++库。

由于我想要在Java 8u60中并行执行流,所以我切换到了JDK 8,并重新启动了所有单元测试。

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

在我的情况下,Java 7比Java 8(相同的代码,代码级别分别为7和8)快17%。

  1. 我想知道这样的结果是否可能是特定于我的应用程序,或者其他人是否已经注意到从Java 7转移到8时性能下降?
  2. 是否有特定的优化可以在代码中进行,以获得最佳的Java 8性能?

如果无法做任何事情,那么我宁愿使用Java 7实现多线程代码,以保持我已经在Java 7中获得的性能提升。


2
使用并行流除非正确使用,否则会更慢。假设您的单元测试未运行 jmh,您可以完全忽略这些数字。 - Boris the Spider
2
@BoristheSpider 我认为楼主还没有使用流,他只是切换了JDK版本,立即注意到总体持续时间的变化。 - Jean-François Savard
2
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - VGR
1
不,Java-8 的整体性能没有下降,通常会更快一些,但这完全取决于使用场景。尝试对您的代码进行分析以找到变慢的确切位置。 - Tagir Valeev
4
单元测试通常是最后一个能告诉你有关性能的东西。它们执行大部分操作仅一次,只是为了证明它们不会失败。这与生产环境的行为方式完全不同(这是故意为之)。 - Holger
显示剩余4条评论
1个回答

6

我在我的测试环境中对运行Java 7u51(*)和Java 8u60的WLS 12.1.3进行了21个SOAPUI(并行)测试。

以下是测试结果(如有截图,请参见下文)。

总结:SOAPUI时间仅为每次通过执行的SOAPUI时间,而
JMX时间在每次通过之间累计)是用于我的应用程序关键部分的时间。 JMX指标是计算时间(我试图将其最小化的时间)。 我不依赖SOAPUI指标,因为我不知道它的确切计算方法。

根据SOAPUI的说法,JDK 7u51比JDK 8u60快6.7%
根据JMX的说法,JDK 7u51比JDK 8u60快15.6%

后者证实了我在单元测试中观察到的趋势-相同结果。尽管这些测试可能不是评估JVM性能的测试,但我认为在我的情况下,保持JDK7更为可取,因为在我的情况下,性能方面很重要。

Java 7
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]
TOTAL SOAPUI:68'623 [ms] (JMX:49'923 [ms])

Java 8
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]
TOTAL SOAPUI:73'560 [ms] (JMX:59'172 [ms])

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

截图

enter image description here


Java 8相对于7在多线程方面的性能优势主要体现在Fork-Join模型上。该图表是个好主意,但太小难以看清数值。 - another

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接