使用Caliper时如何指定命令行?

Jav*_*boy 3 java benchmarking microbenchmark caliper

我发现谷歌的微基准项目Caliper非常有趣,但文档仍然(除了一些例子)完全不存在.

我有两种不同的情况需要影响Jiper Caliper的命令行启动:

  1. 我需要设置一些固定的(理想情况下在几个固定值之间交替)-D参数
  2. 我需要指定一些固定的(理想情况下在几个固定值之间交替)JVM参数

我看到一些关于添加这样的功能的讨论,但我不能断定它是否已被添加,在这种情况下语法变成了什么?

一些示例或指向Java文档的指针(假设这在某处都有记录)等将非常感谢!

Jes*_*son 6

要使用命令行参数修复基准参数,请使用-Dname=value.有一个特殊参数命名benchmark; 它的值是您time方法的后缀.如果您想将参数限制为多个值,请用逗号分隔它们:-Dname=value1,value2.

要设置JVM参数,请使用-Jname=flag1,flag2.

例如,考虑这个基准:

public class StringBuilderBenchmark extends SimpleBenchmark {

    @Param({"1", "10", "100"}) private int length;

    public void timeAppendBoolean(int reps) {
        for (int i = 0; i < reps; ++i) {
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < length; ++j) {
                sb.append(true);
            }
        }
    }

    public void timeAppendChar(int reps) {
        for (int i = 0; i < reps; ++i) {
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < length; ++j) {
                sb.append('c');
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要运行长度为5和6以及大小堆的此基准测试,请使用以下参数:

java -cp caliper-0.0.jar:build/classes/test \
    com.google.caliper.Runner examples.StringBuilderBenchmark \
    -Dlength=5,6 -Dbenchmark=AppendBoolean -Jmemory=-Xmx512M,-Xmx16M
Run Code Online (Sandbox Code Playgroud)

这产生以下结果:

 0% Scenario{vm=java, trial=0, benchmark=AppendBoolean, length=5, memory=-Xmx512M} 81.79 ns; ?=0.31 ns @ 3 trials
25% Scenario{vm=java, trial=0, benchmark=AppendBoolean, length=6, memory=-Xmx512M} 89.72 ns; ?=2.19 ns @ 10 trials
50% Scenario{vm=java, trial=0, benchmark=AppendBoolean, length=5, memory=-Xmx16M} 111.44 ns; ?=6.01 ns @ 10 trials
75% Scenario{vm=java, trial=0, benchmark=AppendBoolean, length=6, memory=-Xmx16M} 120.23 ns; ?=4.59 ns @ 10 trials

  memory length    ns logarithmic runtime
-Xmx512M      5  81.8 =
-Xmx512M      6  89.7 =======
 -Xmx16M      5 111.4 ========================
 -Xmx16M      6 120.2 =============================

vm: java
trial: 0
benchmark: AppendBoolean
Run Code Online (Sandbox Code Playgroud)