jmh 0.6。依存関係として jmh-core、jmh-generator-annprocess、jmh-generator-reflection があります。
まず、残念ながらドキュメントが貧弱です。1 つには、maven ではなく gradle を使用しているため、maven アーキタイプを使用することはできません。
2 つ目は、コマンド ラインではなく Java API を使用することです。
私の非常に単純なコードは次のとおりです。
public final class TestBenchmark
{
private static final int COUNT = 100_000;
private static final List<Integer> LIST = new ArrayList<>();
static {
for (int i = 0; i < COUNT; i++)
LIST.add(i);
}
@GenerateMicroBenchmark
public void foreachLoop()
{
int dummy;
for (final int i: LIST)
dummy = i;
}
@GenerateMicroBenchmark
public void forLoop()
{
int dummy;
final int size = LIST.size();
for (int i = 0; i < size; i++)
dummy = LIST.get(i);
}
public static void main(final String... args)
throws RunnerException
{
final Options options = new OptionsBuilder()
.forks(1)
.warmupIterations(1)
.measurementIterations(20)
.verbosity(VerboseMode.EXTRA)
.build();
new Runner(options).run();
}
}
がないので、正規表現として.include()
意味する.*
ため、すべてのベンチマークです。これは、私のプロジェクトにある唯一のクラスです。
しかし、いいえ:「ベンチマークが見つかりません」。
したがって、最後の手段としてMETA-INF/MicroBenchmarks
、他の場所で提案されているようにファイルを作成してみました。コンテンツ、クラスの名前:
com.github.parboiled1.grappa.TestBenchmark
しかし、それも機能しません:
Exception in thread "main" java.lang.IllegalStateException: Mismatched format for the line: com.github.parboiled1.grappa.TestBenchmark
もちろん、このファイルの形式は文書化されていません。
しかし、最初からこのファイルを使用したくありません。実行するクラスのリストを指定したい。
それ、どうやったら出来るの?