HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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:006591

评论

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

冬奥高质量炫技,Get同款“魔法”:图像处理算法 | 赠书

博文视点Broadview

Apache ShardingSphere 5.1.0 正式发布

SphereEx

数据库 开源社区 SphereEx Apache ShardingSphere

突然发现,npm里request依赖包已经弃用,怎么办?

华为云开发者联盟

npm HTTP node,js Request request依赖包

【C语言】二维数组

謓泽

C语言 2月月更 二维数组

会声会影2022语音转文字功能怎么用

懒得勤快

终极指南:企业级云原生 PaaS 平台日志分析架构全面解析

尔达Erda

微服务 云原生 PaaS 云原生应用

在线时序流程图制作工具

入门小站

《数字经济全景白皮书》数字冰雪篇 重磅发布

易观分析

数字经济 冬奥会

java培训:JVM 内存布局

@零度

JVM JAVA开发

祝贺!首届龙蜥社区年度突出贡献奖揭晓,马上查看

OpenAnolis小助手

Linux 开源 互联网 社群运营

SQL学习(持续更新)

阿丞

事务 索引 sql

哪里可以查到网络安全等级测评与检测评估机构目录?

行云管家

网络安全 等保 等级测评

数据同步与缓存一致性问题

Mars

布隆过滤器 缓存一致性

前端培训:Vue3语法糖详解分享

@零度

Vue 前端开发

大咖说|极客邦CEO霍太稳对话阿里云存储负责人吴结生:我的数据存储20年(无限生长篇)

大咖说

阿里巴巴 InfoQ 存储线

巧用EasyRecovery监控硬盘!为你的电脑保驾护航!

淋雨

EasyRecovery 数据恢复’

再见了,我的散装研发管理平台;再见了,4台ECS!

阿里云云效

阿里云 DevOps 云原生 研发 敏捷研发

敏捷研发项目,我们该如何度量?

阿里云云效

阿里云 项目管理 云原生 度量 敏捷研发

看SparkSQL如何支撑企业级数仓

字节跳动数据平台

hive 字节跳动 Sparksql 数仓

15 行代码在 wangEditor v5 使用数学公式

CRMEB

外包学生管理系统的架构设计

yhjhero

#架构训练营

感谢认可!一封又一封的感谢信

郑州埃文科技

IP地址 网络空间 地图测绘

第十四节:SpringBoot使用JdbcTemplate访问操作数据库基本用法

入门小站

springboot

数字孪生的起源,从救宇航员回家开始

Meta 小元

数据可视化 智慧城市 数字孪生 元宇宙

华为云企业级Redis揭秘第16期:超越开源Redis的ACID"真"事务

华为云开发者联盟

redis 事务 ACID GaussDB(for Redis) 开源Redis

面对锁等待难题,数仓如何实现问题的秒级定位和分析

华为云开发者联盟

sql GaussDB(DWS) 锁等待 分布式死锁

英特尔2022年投资者大会:以软件解锁更大增长机遇

科技新消息

黑客马拉松(Hackathon)是什么?

Speedoooo

黑客马拉松 黑客松

51WORLD赋能数字孪生流域/工程建设,助力智慧水利创新发展

Meta 小元

可视化 数字孪生 智慧水利 元宇宙

敏捷开发中的「史诗」到底是什么?

LigaAI

项目管理 敏捷开发 史诗

星巴克涨价引热议!中国现磨咖啡市场目前到底如何?

易观分析

星巴克涨价 中国咖啡市场

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