1

Caliperについて知り、ドキュメントを確認したところ、すばらしいツールのように見えます(KevinとGoogleのギャングがopensourcingを提供してくれたことに感謝します)。

質問。一般的なユースケースのベンチマークを定義するための注釈ベースのメカニズムがないのはなぜですか?次のようなもののようです:

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

1 つの考えられる説明は、アノテーションを使用するベンチマークは、Java 1.5 より前の JVM では実行できないということです。(Java 1.5 が古いことを考えると、これはあまり説得力のある理由ではありません。)


実際、これは信じがたいことです。最新の Caliper コードベースは と呼ばれる注釈を定義している@VmOptionため、Java 1.5 より前のプラットフォームのサポートを目的とすることはできません。(そうすべきだと言っているわけではありません...)

于 2012-06-04T13:45:56.033 に答える