Caliper:为什么不使用注释来定义基准?

时间:2012-06-04 13:34:55

标签: java microbenchmark caliper

刚刚发现了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(); 
  }
}

可以节省几行代码并提高可读性。

2 个答案:

答案 0 :(得分:3)

由于以下几个原因,我们决定使用timeFoo(int reps)而不是@Time foo(int reps)

  • 我们仍然有很多JUnit 3.8测试,并且与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之前的平台。 (不是说我建议他们应该......)