我正在寻找一个Java基准测试库。我对Clojure中Criterium基准测试库的功能非常熟悉和满意。它具有如下功能:
* Statistical processing of multiple evaluations
* Inclusion of a warm-up period, designed to allow the JIT compiler to optimise its code
* Purging of gc before testing, to isolate timings from GC state prior to testing
* A final forced GC after testing to estimate impact of cleanup on the timing results
它的界面非常友好
(bench expr & opts)
打印摘要统计报告,例如:
=> (bench (Thread/sleep 1000))
Execution time mean : 1.000803 sec
Execution time std-deviation : 328.501853 us
Execution time lower quantile : 1.000068 sec ( 2.5%)
Execution time upper quantile : 1.001186 sec (97.5%)
我正在寻找一个类似的Java库,也许是一个公开一个替代方法,比如一个Callable,或一个Runnable,并打印一个类似的报告。如:
BenchMark.bench(new Callable<String>() {
@Override
public String call() { ... }
})
有没有人知道一个功能齐全,开源免费的啤酒库,这样做?也许也包含内存统计数据?
答案 0 :(得分:7)
我认为目前最好的基准测试库之一是jmh。它由Oracle人员积极开发,它是开源的,它用于微开放openJDK的部分,包括并发API和JavaFX。
输出非常全面,可以包括每个操作的时间,每毫秒的操作数,置信区间等。您也可以选择引入线程,争用,共享等。
答案 1 :(得分:3)
Criterium将Brent Broyer的基准文章列为灵感:Elliptic Group, Inc. Java benchmarking article。它伴随着(并且部分致力于提供描述,尽管它包含许多完全一般的内容)一个恰好这种类型的Java基准测试库(在按照上面的链接后向下滚动一下,找到jar的链接和来源下载)。
README(包含在完整的项目下载中)将LGPL3指定为许可证。
答案 2 :(得分:0)
嗯,对于Java,jMeter http://jmeter.apache.org/是性能测试的标准(因此不太基准):)。
我们使用Sigar https://support.hyperic.com/display/SIGAR/Home以“独立于平台”的方式监视JVM以获取所有类型的参数(因此不仅仅是JMX bean公开的内容)。
答案 3 :(得分:0)
类似的工具是Caliper。
我个人写自己的基准。它并不简单,并且有很多陷阱,但您可以更好地了解您的测试内容。