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 应该用什么来调用这个方法?谁来生成它?它将包含什么?这些答案应由用户通过@State类提供,如JMHSample_03_StatesJMHSample_04_DefaultState中所述。

于 2015-03-24T07:02:07.327 回答