如何在linux上做Java基准测试工具JMH测试(2)
以前我们有一篇文章专门介绍过如何在linux上做Java基准测试工具JMH测试,由于gradle 版本的更新和需求的变化,原先的文章已经不能满足需求,所以今天又写下一篇总结。
目前使用的gradle 版本如下:
gradle -v------------------------------------------------------------
Gradle 8.14.2
------------------------------------------------------------Build time: 2025-06-05 13:32:01 UTC
Revision: 30db2a3bdfffa9f8b40e798095675f9dab990a9aKotlin: 2.0.21
Groovy: 3.0.24
Ant: Apache Ant(TM) version 1.10.15 compiled on August 25 2024
Launcher JVM: 21.0.7 (Tencent 21.0.7+1-LTS)
Daemon JVM: D:\Program Files (x86)\java\TencentKona-21.0.7.b1 (no JDK specified, using current Java home)
OS: Windows 11 10.0 amd64
我们需要引入 gradle jmh 插件: jmh-gradle-plugin, 这里记住我们的gradle 版本为8.14.2 ,对应插件版本为0.7.0,但jmh可以升级到最高版本1.37,插件的官网在这里:https://github.com/melix/jmh-gradle-plugin
buildscript {repositories {maven {url = uri("https://plugins.gradle.org/m2/")}}dependencies {classpath("me.champeau.jmh:jmh-gradle-plugin:0.7.3")}
}subprojects {apply plugin: "me.champeau.jmh"jmh {zip64 = true// 可以指定特定的基准测试类includes = ['.*NavmeshBenchMark.*']jvmArgs = ['-Dfile.encoding=UTF-8', '-server', '-Xms4g', '-Xmx4g']humanOutputFile = rootProject.layout.buildDirectory.file("reports/jmh/human.txt").get().asFileresultsFile = rootProject.layout.buildDirectory.file("reports/jmh/results.json").get().asFileresultFormat="JSON"verbosity = 'NORMAL'}
}
其中 includes = ['.*NavmeshBenchMark.*']
意思是要包含NavmeshBenchMark
关键词的类,
然后,在命令行执行:
gradle :game:jmh
等命令执行完成,就会在根目录`build/reports/jmh/生成两个报告,一个是生成的明细和结果human.txt,一个只包含结果result.txt。
Benchmark Mode Cnt Score Error Units
NativeNavmeshBenchMark.testFindNearestWalkablePoint thrpt 10 4960958.578 ± 264752.403 ops/s
NativeNavmeshBenchMark.testIsNoCollision thrpt 10 3998607.075 ± 191662.288 ops/s
NativeNavmeshBenchMark.testPointWalkable thrpt 10 5164636.933 ± 279201.965 ops/s
NativeNavmeshBenchMark.testSearchPath thrpt 10 44970.674 ± 1834.446 ops/s
NavmeshBenchMark.testFindNearestWalkablePoint thrpt 10 4129492.137 ± 162828.284 ops/s
NavmeshBenchMark.testIsNoCollision thrpt 10 2496494.104 ± 80616.840 ops/s
NavmeshBenchMark.testPointWalkable thrpt 10 4187051.891 ± 124505.527 ops/s
NavmeshBenchMark.testSearchPath thrpt 10 13665.673 ± 1585.468 ops/s