刚刚发现了Caliper,并通过了文档 - 它看起来像一个很棒的工具(感谢Kevin和Google帮派开源)。
问题。为什么没有基于注释的机制来定义常见用例的基准?似乎有类似的东西:
public class Foo {
// Foo's actual code, followed by...
@Benchmark
static int timeFoobar(int reps) {
Foo foo = new Foo();
for (int i = 0; i < reps; ++i) foo.bar();
}
}
可以节省几行代码并提高可读性。
答案 0 :(得分:3)
由于以下几个原因,我们决定使用timeFoo(int reps)
而不是@Time foo(int reps)
:
testFoo()
方案保持一致。import com.google.caliper.Time
time
Foo 的基准名称报告为 Foo 。这很简单,只是methodName.substring(4)
。如果我们使用注释,我们最终会使用更复杂的机制来处理@Time timeFoo(int reps)
,@Time benchmarkFoo(int reps)
和@Time foo(int reps)
等名称。也就是说,我们正在重新考虑Caliper 1.0。
答案 1 :(得分:0)
一种可能的解释是,使用Annotations的基准测试无法在Java 1.5之前的JVM上运行。 (考虑到Java 1.5的年代,这不是一个非常有说服力的理由。)
实际上这是不可信的。最新的Caliper代码库定义了一个名为@VmOption
的注释,因此它们不能用于支持Java 1.5之前的平台。 (不是说我建议他们应该......)