OpenJDK 14 性能保持提升,但 OpenJDK 8 仍是最强王者

来源: OSCHINA
编辑: 局长
2020-03-21

OpenJDK 14 与 OpenJDK 8 及多个主要版本的性能基准测试对比。

OpenJDK 14 已于近日 GA,其在性能方面是否有改进、以及有哪些改进引起了不少开发者的关注。本文将会介绍通过运行新的基准测试以考察从 OpenJDK 8 至 14 的所有主要发行版本,同时考察跨多个工作负载的 JVM 性能,以及 OpenJDK 14 与 JVM 先前版本相比性能如何。

此次测试通过在被测试的每个发行版上使用相同的 Java 字节码编译的 Java 程序来查看 JVM 的性能,并使用被测软件包的参考/上游编译版本。为了保证测试受干扰的因素将降至最低,每次都使用相同的选项,除了交换用于测试每个发行版的 OpenJDK x86_64 Linux 构建之外,没有进行任何其他更改。

通过使用 Phoronix 的测试套件,测试内容包含从 SPECjbb 到 Java 2D 工作负载。

测试环境以及测试机器配置:

首先通过使用 Java 2D 基准测试对 Java 图形管道的性能进行压测,可以看到文本渲染性能一直稳步提升,直到第 12 版达到最高点,然后逐渐下降为目前 13 和 14 的水平,与 OpenJDK 8 比较相似。

而在 Java 2D 的图像渲染性能方面,它们的水平基本保持一致,但是 OpenJDK 14 以微弱的的性能优势成为了最好性能的那个。

这里还测试了使用矢量图形的渲染效果,水平基本保持一致。

通过进行非常基本的 Java SciMark 微基准测试,可以看到 OpenJDK 8 目前为止是最快的,并且自 OpenJDK 9 至 14 以来,性能基本上持平。OpenJDK 的运行速度约为 OpenJDK 8 的 88%。

通过使用 Java Bork 文件加密软件包进行测试,在经过测试的版本中,性能基本上没有变化。

自 OpenJDK 8 以来,DaCapo 的 H2 基准被建模为类似于 JDBCbench 的内存中(in-memory)基准,其性能得到了很好的提升,与此前的版本相比,OpenJDK 14 再次以微弱的优势获得了第一名。

可以看到,基于 Python Pybench 的 Jython 基准测试也是 OpenJDK 8 拥有最佳成绩的众多案例之一。

在运行 Daytrader 基准测试的 Tradebeans 测试中,OpenJDK 14 再度以微弱的优势拿下最佳的成绩。

就像打乒乓球一样,Renaissance 的 Scala Dotty 基准测试提供了一个类似的例子,说明 OpenJDK 的性能也会上下波动。在此次测试中,OpenJDK 14 又比最近的版本好一些。

在其他一些 Renaissance 基准测试中,OpenJDK 11〜12 的性能反而最差,而 OpenJDK 14 提供的性能与 OpenJDK 8 类似。

在使用 Jenetics+Futures 遗传算法的 Renaissance 基准测试中,所有版本的性能基本保持一致。

通过观察使用 Apache HBase 进行的这几个基准测试,可以发现 OpenJDK 8 运行最快,或者这几个 Java 版本的性能基本持平。

在使用 SPECjbb 进行的基准测试中 ,OpenJDK 8 是迄今为止最快且明显拉开距离的版本。自版本 11 起,OpenJDK 的 SPECjbb 性能有所提高,不过在运行 Ubuntu Linux 的 AMD Ryzen 9 3950X 系统上,任何版本的速度均未达到 OpenJDK 8 的速度。

结论:

当对所有执行的 Java 基准测试结果取几何平均值时,OpenJDK 8 毫无疑问是最快的 Java 版本。业界经常听到有关 OpenJDK 8 仍可提供最佳性能的消息,以及为什么英特尔的 Clear Linux 在有众多选择的情况下仍坚持该版本的原因。从本文的测试结果来看,这不足为奇。

好消息是,从这种几何意义上来看,OpenJDK 14 是经过测试的发行版中第二快的版本。与之前的版本相比,其领先优势虽然很小,但整体来看毕竟是在保持进步。

展开阅读全文
20 收藏
分享
加载中
精彩评论
J8就是坚挺!
2020-03-21 13:35
14
举报
里面的用词也有意思,JDK14胜出的大多是微弱,JDK8胜出的不是最佳就是优秀😄
2020-03-21 10:56
5
举报
换个版本估计比换个语言成本还高,所以继续打磨jdk8
2020-03-21 12:06
2
举报
最新评论 (16)
用的是哪一个牌子openjdk来测试?
2020-03-21 21:47
0
回复
举报
J8就是坚挺!
2020-03-21 13:35
14
回复
举报
您好,请问jdea2019提前支持jdk14的语法了吗?
2020-03-21 12:37
0
回复
举报
2020才支持
2020-03-21 15:30
0
回复
举报
您好,不是都提前支持语法先的吗?然后完全支持?
2020-03-21 16:55
0
回复
举报
坐等openjd14
2020-03-21 12:31
0
回复
举报
换个版本估计比换个语言成本还高,所以继续打磨jdk8
2020-03-21 12:06
2
回复
举报
CMS就是适合跑分啊,但是延迟呢,嘿嘿嘿
2020-03-21 11:31
0
回复
举报
JDK8最快很有可能是因为默认ParallelGC的原因, JDK9以后默认G1GC其实对性能有些影响的(多数情况差别不大).
而纯计算在我测试的结果是越新的版本越快,当然差别也不大.
2020-03-21 11:10
0
回复
举报
同样的项目,gc团队的测试结果跟他们很不同
2020-03-21 18:04
0
回复
举报
奇怪的是,新版本jdk的parallel gc性能都不如jdk8的,甚至经常还不如默认的g1,原因不明。
2020-03-21 19:27
0
回复
举报
里面的用词也有意思,JDK14胜出的大多是微弱,JDK8胜出的不是最佳就是优秀😄
2020-03-21 10:56
5
回复
举报
不太懂JVM测试,不过看完有几个问题,JVM配置是什么?JVM走的都是默认的配置吗?压测的时间是多久呢?
2020-03-21 10:51
0
回复
举报
因为Java 8的默认gc牺牲latency换throughput,更适合跑分。
2020-03-21 10:49
0
回复
举报
更多评论
16 评论
20 收藏
分享
返回顶部
顶部