Взгляните на этот простой тест:
@State(Scope.Benchmark)
@Fork(value = 1)
@Warmup(iterations = 3, time = 300, timeUnit = TimeUnit.MILLISECONDS)
@Measurement(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS)
@BenchmarkMode(Mode.Throughput)
public class SimpleBenchmark {
int[] array;
@Setup
public void setup() {
this.array = new int[100_000];
}
@Benchmark
public void dec_all() {
for(int i = 0; i < this.array.length; i++){
this.array[i]--;
}
}
@Benchmark
public void dec_half() {
for(int i = 0; i < this.array.length; i+=2){
this.array[i]--;
}
}
}
Вариант № 1 - Терминал . Если вы используете Maven, вам понадобится что-то подобное в вашем pom.xml
[...]
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>${uberjar.name}</finalName>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>org.openjdk.jmh.Main</mainClass>
</transformer>
</transformers>
<filters>
<filter>
<!-- Shading signed JARs will fail without this. /832298/nevernyi-fail-podpisi-pri-popytke-zapustit-jar -->
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Затем просто запустите его в терминале / консоли:
mvn clean package
java -jar target/benchmarks.jar
Вариант № 2 - IDE . Запустите его из main в вашей IDE:
import org.openjdk.jmh.Main;
[...]
public static void main(String... args) throws Exception {
Main.main(args); // WARN: for better results run it from terminal!
}
В результате вы увидите:
Benchmark Mode Cnt Score Error Units
SimpleBenchmark.dec_all thrpt 10 37278,685 ± 757,013 ops/s
SimpleBenchmark.dec_half thrpt 10 28749,803 ± 811,464 ops/s
Из-за @BenchmarkMode(Mode.Throughput)
вы получите [ops / s] ( операций в секунду ). Попробуйте другие режимы, например AverageTime
Вы также можете попробовать этот шаблон: https://github.com/jawb-software/template-jmh-benchmark/tree/simple