我发现 Google 的微型基准测试项目 Caliper 非常有趣,但文档仍然(除了一些示例)完全不存在。
我有两种不同的情况需要影响 JVM 卡尺启动的命令行:
- 我需要设置一些固定的(最好在几个固定值之间交替)-D 参数
- 我需要指定一些固定(理想情况下在几个固定值之间交替)JVM 参数
我看到了一些关于添加此类功能的讨论,但我无法得出结论是否已添加它,在这种情况下,语法会变成什么?
一些示例或指向 Java 文档的指针(假设这完全记录在某处)等将非常感激!
我发现 Google 的微型基准测试项目 Caliper 非常有趣,但文档仍然(除了一些示例)完全不存在。
我有两种不同的情况需要影响 JVM 卡尺启动的命令行:
我看到了一些关于添加此类功能的讨论,但我无法得出结论是否已添加它,在这种情况下,语法会变成什么?
一些示例或指向 Java 文档的指针(假设这完全记录在某处)等将非常感激!
要使用命令行参数修复基准参数,请使用-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');
}
}
}
}
要运行长度为 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
这会产生以下结果:
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