3

私はJMHとベンチマークが初めてです。public byte[]getBytes(String charsetName) メソッドの小さなテストを書きました。ただし、maven はビルドに失敗します。これが私のコードです:

package org.openjdk.jmh.samples;
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Thread)

public class Test
{   @GenerateMicroBenchmark
   public byte [] testgetbyte (String Str)
   {   

   byte[] bytes = Str.getBytes("ISO-8859-1");
   return bytes;
    }

public static void main(String[] args) throws RunnerException {      
    Options opt = new OptionsBuilder()
            .include(Test.class.getSimpleName())
            .warmupIterations(5)
            .measurementIterations(5)
            .forks(1)
            .build();

    new Runner(opt).run();

}

    }

実行すると: mvn clean install. ビルド失敗のエラー メッセージが表示されます。

4

1 に答える 1

7

@GenerateMicroBenchmark非常に古いバージョンの JMH を使用しているようです。更新してください。JMH 1.7 では、このサンプルは次のようになります。

@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Thread)
public class Test {
    @Benchmark
    public byte[] test(String str) throws UnsupportedEncodingException {
        return str.getBytes("ISO-8859-1");
    }
}

...言う:

[ERROR] /home/shade/temp/stest/src/main/java/org/openjdk/Test.java:
[19,19] Method parameters should be @State classes.

これは、まさにそれString strが議論として受け入れられないことを示してい@Benchmarkます。考えてみてください: StringJMH はこのメソッドを何で呼び出すべきでしょうか? 誰がそれを生成しますか?それは何を含みますか?これらの回答は、 JMHSample_03_StatesおよびJMHSample_04_DefaultState@Stateで説明されているように、クラスを介してユーザーが提供する必要があります。

于 2015-03-24T07:02:07.327 に答える