QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

JEP 230:JDK 12 的新微基准测试套件

  • 2019-05-08
  • 本文字数:2596 字

    阅读完需:约 9 分钟

JEP 230:JDK 12的新微基准测试套件

OpenJDK微基准测试套件(OpenJDK Microbenchmark Suite,JEP 230)基于Java Microbenchmark Harness(JMH),是 JDK 12 版本的一个新特性。JEP 230 的目标在于提供一个稳定且经过优化的基准,其中包括了近 100 个基准测试的初始集合(从jmh-jdk-microbenchmarks项目导入的,这是 JMH 基准测试的一个套件),并且还提升了编写新基准测试和搜索已有基准测试的便利性。


微基准测试套件并不是像 javajavacjdeps jconsole 那样的独立 JDK 工具。相反,它的代码是与JDK源码放到一起的。如 JEP 230 的提案所述:


微基准测试套件的构建将会集成到常规的 JDK 构建系统中。它将会是一个独立的 target,在常规的 JDK 构建中并不会执行它,这样的话,对微基准测试套件不感兴趣的开发人员和其他人员就能保持较短的构建时间。


微基准测试,是衡量一小段 Java 代码性能的艺术,如果没有按照正确的方式实现的话,可能会导致不精确和/或误导性的结果。要编写正确的微基准测试,需要考虑很多的事情。在“Optimizing Java”一书的第 5 章,作者Ben EvansJames GoughChris Newland讨论了编写微基准测试所面临的挑战:


我们无法将正在执行的代码与 JIT 编译器、内存管理和 Java 运行时提供的其他子系统分离开来。同时,我们也不能忽视测试所运行的操作系统、硬件、运行时条件(如加载)等因素的影响。


甲骨文的 Java 语言架构师Brian Goetz剖析有缺陷的基准测试时,这样说到:


微基准测试的可怕之处在于,它们总能生成一个数字,即便这个数字毫无意义。它们的确测量了一些东西,只是我们并不能确定测试的是什么。

通常,它们只度量了特定微基准测试的性能,仅此而已。但是很容易让你相信你的基准测试度量了特定构造的性能,并错误地总结该构造的性能。


Aleksey Shipilëv是 Red Hat 的首席软件工程师,在Twitter上是这样回应性能问题的


任何脱离了反汇编/代码生成分析的纳基准测试(nanobenchmark)都是不可信的。


来自甲骨文的核心技术人员Claes Redestad与 InfoQ 讨论了这个新的微基准测试套件。


InfoQ:创建这个微基准测试套件的最初动机是什么?


Claes Redestad:多年以来,微基准测试就是 OpenJDK 开发过程的一部分,实际上微基准测试套件只是将微基准测试的使用更紧密地集成到 OpenJDK 开发过程中的漫长道路上的一个步骤。

作为最初推动力的一部分,大多数(甚至可以说所有)微基准测试已经存在很长时间了,它们所依赖的 microbenchmark harness,即 JMH,已经存在好多年了。唯一新鲜的事情是它们集成到了 OpenJDK 构建系统中和主 OpenJDK 仓库中。

在构想这个 JEP 的时候,OpenJDK 项目被分割到多个存储库和 forest 中,这使得编写跨 tree 的测试(和微基准测试)非常麻烦。最初的 JEP 提案试图为这些微基准测试添加一个新的存储库,但这一努力最终搁浅了,部分原因在于人们对它是否值得这么麻烦而产生了分歧。

在此之后,OpenJDK 已经整合为一个单独的仓库结构,很多单独开发的测试套件也整合到了主仓库中。该项目五年前面临的很多障碍已经不复存在了。

最终继续推进 JEP 230 提案的动机在于,将功能测试集成和整合(co-locate)到主 OpenJDK 仓库的努力获得了成功。作为整合的测试套件,这并不意味着我们所做的所有基准测试都是基于整合的微环境(实际上,远远未实现)。但是,当我们要测试新的 API,而这个 API 只在当前工作的分支上可用时,将这些测试全部集成到一个仓库中是非常便利的。


InfoQ:为什么微基准测试套件不是一个单独的工具呢(像 java、javac、jdpes 和 jconsole 那样)?


Redestad:实际上,JEP 230 只提供了构建和运行微基准测试的方法,并将其作为开发 OpenJDK 本身的一个组成部分,所以套件并没有很自然地转换为适合包含到 JDK 交付物中的工具;这有点像我们不会把所有其他测试打包到 JDK 二进制下载文件中。


InfoQ:对于开发人员来说,开始使用微基准测试套件的最佳方式是什么,比如说到哪里去寻找源码?


Redestad:我猜想,大多数的 Java 开发人员可能希望将微基准测试添加到自己的项目中,而不是贡献给 OpenJDK。因此,对他们来说,虽然微基准测试套件可能有助于寻找灵感,但我建议还是要先阅读 JMH。它提供了相当多的例子,并且很容易搭建一个项目并开始进行尝试。Aleksey Shipilëv维持这个项目许多年了,并且提供了大量的资源。

如果你希望构建、测试 OpenJDK,甚至想为 OpenJDK 做出贡献的话,那可以从https://openjdk.java.net/开始,通过http://hg.openjdk.java.net/jdk/jdk下载代码,并阅读http://hg.openjdk.java.net/jdk/jdk/raw-file/96d290a7e94f/doc/testing.html上的测试文档。


InfoQ:关于微基准测试套件,你还有什么要与我们的读者分享的吗?


Redestad:为 OpenJDK 做出贡献的一种方法是在你自己的 CI 中实际构建并运行这些微基准测试,并报告发现的回归结果。目前,有太多的硬件和系统配置,我们可能不会像你这样在每次新增硬件时都运行所有可用的基准测试,所以你可能会发现我们无法检测到的问题。


InfoQ:微基准测试套件的前景如何?


Redestad:目前,我正在寻求反馈,同时鼓励更多的 OpenJDK 开发人员使用它,甚至改进它。我很高兴地看到已经有新的微基准测试添加了进来,对特性集本身也有一些非常好的外部贡献,比如添加对构建原生库的支持(https://bugs.openjdk.java.net/browse/JDK-8219393)。

我希望我们能够在细节上进行足够多地改进,以便在开发新特性的时候,添加和运行微基准测试能够像添加新的功能测试那样简单和自然。.


InfoQ:你目前的工作职责是什么呢,换句话说,你日常都做些什么?


Redestad:我的主要职责是帮助很多 OpenJDK 开发人员在性能方面按照正确的方式前进。对 JEP 230 的贡献就是这种事情。在我们的夜间测试中进行回归检测筛选则是我的另一项这样的工作。

每天,我都会竭尽所能提供修复和改进。在过去的几年里,我从减少 OpenJDK 的启动和内存占用开销中得到了很多乐趣,包括重构和改进内部 lambda 运行时,以获取比 JDK 8 更短的引导时间。


除了微基准测试套件之外,JDK 12 其他的新特性包括:体验式的新垃圾收集器Shenandoah(JEP 189)、增强的switch语句(JEP 325)以及新的 JVM constants API(JEP 334)。

参考资源


查看英文原文JEP 230: A New Microbenchmark Suite for JDK 12


2019-05-08 08:006649

评论

发布
暂无评论
发现更多内容

如何使用阿里云 CDN 对部署在函数计算上的静态网站进行缓存

阿里巴巴云原生

阿里云 Serverless 云原生 CDN 函数计算

云原生赋能开发测试

百度Geek说

元原生

火山引擎大规模机器学习平台架构设计与应用实践

火山引擎开发者社区

人工智能 机器学习

Java 8 开始新增的 Optional 类 - Optional 对象中的返回

HoneyMoose

Flutter 开源状态管理插件一览

岛上码农

flutter ios 安卓 移动端开发 5月月更

「国货」设计SaaS崛起,黑马inCreate自图冲出公装赛道

ToB行业头条

Cocos creatorの摇杆操控运动

空城机

Cocos 5月月更

linux之grep使用技巧

入门小站

Linux

Redis「7」实现分布式锁

Samson

redis 学习笔记 5月月更

百度程序员Android开发小技巧

百度Geek说

移动端

企评家,企业成长性评价为创业板企业投融资决策提供信息支持

企评家

企评家 |江西长运股份有限公司成长性评价简介

企评家

企评家 |上海家化联合股份有限公司成长性评价简介

企评家

Seata x 2022 开源之夏 ,一起来做开源达人!

阿里巴巴云原生

阿里云 云原生 seata 开源之夏

加入MOVE,一起体验Move2Earn的运动乐趣

BlockChain先知

Bootstrap 和 WordPress 的区别

海拥(haiyong.site)

bootstrap Wordpress 博客部署 WordPress 5月月更

毫秒级返回数据,58同城 DBA 团队选择 TDengine 解决传感器数据处理难题

TDengine

数据库 tdengine

火爆的健身应用软件是如何一步一步打造出来的?

龙智—DevSecOps解决方案

DevOps perforce Helix Core

云钉一体:EventBridge 联合钉钉连接器打通云钉生态

阿里巴巴云原生

阿里云 云原生 事件总线 EventBridge

为什么企业要告别自托管并迁移到 Atlassian 云版?

龙智—DevSecOps解决方案

Atlassian Atlassian 云版 Atlassian迁移

[Day42]-[回溯]-组合

方勇(gopher)

LeetCode 数据结构和算法 回溯算法

代码语言的魅力

百度Geek说

“学生管理系统”毕设架构设计

Pengfei

架构设计原则

数据库连接池 -Druid 源码学习(八)

wjchenge

Druid 数据库连接池

在线文本列表差集计算工具

入门小站

工具

第三方 IP:管理半导体外部 IP

龙智—DevSecOps解决方案

perforce Methodics IPLM 管理 IP

客户成功是一种思维模式 | ONES 人物

万事ONES

二分实现及工程使用—Kafka

工程师日月

算法 java 编程 5月月更

吐血整理!42个人工智能机器学习数据集推荐!

澳鹏Appen

人工智能 机器学习 大数据 计算机视觉 数据集

LinkedList 源码分析-初始化&节点查询

zarmnosaj

5月月更

druid源码学习八

Nick

Apache Druid 自旋锁

JEP 230:JDK 12的新微基准测试套件_编程语言_Michael Redlich_InfoQ精选文章