如何使用Java 12的微基准测试套件?

11
根据JEP 230:Microbenchmark Suite,Java 12内置了微基准测试套件。该JEP解释说,它基本上是JMH,但不需要使用Maven/Gradle显式依赖于它。然而,它没有指定如何访问属于该套件的类/注释以执行基准测试。
我的问题是:
  • 是否有特定的Java模块需要在我的module-info.java中要求才能使用此套件?
  • 这个套件的类/注释位于哪个包中?
  • 这个套件和JMH之间有什么主要区别?

8
据我所理解,这不是用于您创建应用程序基准测试工具。它是用于创建 JDK 代码基准测试的工具,这些基准测试甚至不包括在常规 JDK 构建中。如链接页面所述:“基准测试套件不是常规开发人员 JDK 构建所必需的;它将是一个单独的构建目标。” - Holger
1个回答

18

你的解释是错误的。JEP说:

JDK源代码添加基本的微基准套件,并使开发人员能够运行现有的微基准并创建新的。

也就是说,这不一定是进入JDK发行版的内容,只是为了更轻松地在JDK代码上运行基准测试而添加到源代码库中的内容。尽管,公平地说,它被列为JDK 12的一个“功能”似乎有点误导。

可以使用OpenJDK构建系统运行基准测试。一旦从https://github.com/openjdk/jdk(或包括JEP的另一个存储库)克隆了OpenJDK源代码,就可以通过使用以下命令之一来运行基准测试:

make test TEST="micro:java.lang.reflect"

基准测试文件位于\test\micro\目录中。另请参阅文档:https://github.com/openjdk/jdk/blob/master/doc/testing.md#microbenchmarks 此外,在生成构建配置时,需要指定JMH及其依赖项。
bash configure --with-jmh="/path/to/jmh/jars"

指定的路径应该指向包含JMH jars的目录。所需的jars是: commons-math3, jmh-core, jmh-generator-annprocessjopt-simple

6
有时候,新版 Java 中列出的某些功能实际上只是内部实现细节,比如“代码清理”或“最终将所有源代码存储库整合为一个”,等等。同样,该列表没有区分一般 Java 功能和参考实现(HotSpot/OpenJDK)的功能。 - Holger
2
@Holger 是的,JDK 12页面上列出的内容似乎是从JBS中具有fixVersion 12的JEP转储而来:https://bugs.openjdk.java.net/browse/JDK-8209093?jql=issuetype%20%3D%20JEP%20AND%20fixVersion%20%3D%20%2212%22 - Jorn Vernee

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