JDK 14 性能提升,但 JDK 8 仍是最强王者!
作者:局长
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 拥有最佳成绩的众多案例之一。推荐阅读:java 8 stream,性能也牛逼么?
在运行 daytrader 基准测试的 tradebeans 测试中,openjdk 14 再度以微弱的优势拿下最佳的成绩。
就像打乒乓球一样,renaissance 的 scala dotty 基准测试提供了一个类似的例子,说明 openjdk 的性能也会上下波动。在此次测试中,openjdk 14 又比最近的版本好一些。
在其他一些 renaissance 基准测试中,openjdk 11〜12 的性能反而最差,而 openjdk 14 提供的性能与 openjdk 8 类似。
在使用 jenetics+futures 遗传算法的 renaissance 基准测试中,所有版本的性能基本保持一致。java 14 令人期待的 5 大新特性,推荐大家看下。关注微信公众号:java技术栈,在后台回复:java,可以获取我整理的 n 篇最新 java 新特性教程,都是干货。
通过观察使用 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 是经过测试的发行版中第二快的版本。与之前的版本相比,其领先优势虽然很小,但整体来看毕竟是在保持进步。
关注微信公众号:java技术栈,在后台回复:java,可以获取我整理的 n 篇最新 java 新特性教程,都是干货。
推荐去我的博客阅读更多:
2.spring mvc、spring boot、spring cloud 系列教程
3.maven、git、eclipse、intellij idea 系列工具教程
生活很美好,明天见~
上一篇: Java字节码增强技术知识点详解
下一篇: 解析PHP中Exception异常机制