2

我正在寻找一个 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 库,可能是一个公开了一个 bench 方法的库,该方法采用 Callable 或 Runnable 并打印类似的报告。如:

  BenchMark.bench(new Callable<String>() {
      @Override
      public String call() { ... }
  })

有谁知道啤酒库中的功能齐全、免费的开源软件?也许还包括内存统计信息?

4

4 回答 4

7

我认为目前最好的基准测试库之一是jmh。它由 Oracle 人员积极开发,是开源的,用于对 openJDK 的部分进行微基准测试,包括并发 API 和 JavaFX。

输出非常全面,可以包括每次操作的时间、每毫秒的操作数、置信区间等。您还可以选择引入线程、争用、共享等。

于 2013-09-01T21:15:41.987 回答
3

Criterium 将 Brent Broyer 的基准测试文章列为灵感来源:Elliptic Group, Inc. Java 基准测试文章。它伴随着(并且部分致力于提供描述,尽管它包含许多完全通用的内容)正是这种类型的 Java 基准测试库(在点击上面的链接后向下滚动一点以找到指向 jar 的链接和源下载)。

自述文件(包含在完整的项目下载中)将 LGPL3 指定为许可证。

于 2013-09-01T21:06:27.050 回答
0

好吧,对于 Java,jMeter http://jmeter.apache.org/是性能测试的标准(所以不是基准测试):)。

我们使用 Sigar https://support.hyperic.com/display/SIGAR/Home以“平台无关”的方式监视 JVM 的所有类型的参数(因此不仅是 JMX bean 公开的内容)。

于 2013-09-01T21:11:20.570 回答
0

一个类似的工具是Caliper

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

于 2013-09-01T21:20:17.940 回答