2

同じカスタム クラスの 2 つの実装があります。

private List<String> a = Util.myCustomClass();
private List<String> b = Util2.myCustomClass();

それぞれの関数 (すべて同じ名前) の実行時間を比較したいと考えています。現在、私のベンチマーク テストは次のようになっています。

@Benchmark
public boolean contains_val_a() {
   return a.contains(val);
}

@Benchmark
public boolean contains_val_b() {
  return b.contains(val);
}

そして、この並列構造を 25 ほどの異なる関数に対して繰り返します (2 つの実装があるため、各関数を 2 回記述します)。25 個の @Benchmark 関数のみを記述し、両方の実装で jmh に各関数を実行させる方法はありますか?

4

1 に答える 1

1

このサンプルで説明されているように@Param、ロードするクラスを (文字列で) 定義し、メソッドでテスト対象のクラスを初期化するために使用できます: https://github.com/ktoso/sbt-jmh/blob/master /src/sbt-test/sbt-jmh/jmh-run/src/main/scala/org/openjdk/jmh/samples/JMHSample_27_Params.scala@Setup

本質的に

@Param(Array("a", "b"))
val name: String = ""

var thing: CommonInterface = ""

@Setup
def setup(): Unit = name match {
  case "a" => new A
  case "b" => new B
}

次に、JMH はテスト結果に「param」列を含めます。そのため、どの結果がどの値に対するものであったかがわかります。

于 2015-03-02T09:11:24.077 に答える