Java中的BenchMark框架与Criterium类似

时间:2013-09-01 20:59:49

标签: java clojure benchmarking

我正在寻找一个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() { ... }
  })

有没有人知道一个功能齐全,开源免费的啤酒库,这样做?也许也包含内存统计数据?

4 个答案:

答案 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

我个人写自己的基准。它并不简单,并且有很多陷阱,但您可以更好地了解您的测试内容。