如何用jmh写一个getbytes的小基准测试?
how to write a small benchmark of getbytes with jmh?
我是 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 全新安装。我收到构建失败错误消息。
@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
论点是不可接受的。想一想:JMH 应该用什么 String
来调用这个方法?谁来生成它?它会包含什么?这些答案应由用户通过 @State
类 提供,如 JMHSample_03_States and JMHSample_04_DefaultState.
中所述
我是 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 全新安装。我收到构建失败错误消息。
@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
论点是不可接受的。想一想:JMH 应该用什么 String
来调用这个方法?谁来生成它?它会包含什么?这些答案应由用户通过 @State
类 提供,如 JMHSample_03_States and JMHSample_04_DefaultState.