1

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

将节省几行代码并增强可读性。

4

2 回答 2

3

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

  • 我们仍然有很多 JUnit 3.8 测试,并且喜欢与它的testFoo()方案保持一致。
  • 不需要import com.google.caliper.Time
  • 我们最终会将 Foo 的基准名称报告timeFoo。这很容易,只是. 如果我们使用注释,我们最终会使用更复杂的机制来处理像,和.methodName.substring(4)@Time timeFoo(int reps)@Time benchmarkFoo(int reps)@Time foo(int reps)

也就是说,我们正在为 Caliper 1.0 重新考虑这一点。

于 2012-06-04T17:35:12.207 回答
0

一种可能的解释是,使用 Annotations 的基准无法在 Java 1.5 之前的 JVM 上运行。(考虑到 Java 1.5 的历史,这不是一个很有说服力的理由。)


其实这是不靠谱的。最新的 Caliper 代码库定义了一个名为的注解,@VmOption因此它们不能以支持 Java 1.5 之前的平台为目标。(并不是我建议他们应该......)

于 2012-06-04T13:45:56.033 回答