From b49844c3d8089d054155959a070f0079ace1f2eb Mon Sep 17 00:00:00 2001 From: ericgoebelbecker <@592Gbetz> Date: Fri, 8 Dec 2017 23:11:50 -0500 Subject: [PATCH] BAEL-1374 - use JMH. Move out of test area. --- .../baeldung/array/ArrayBenchmarkRunner.java | 21 ++++ .../com/baeldung/array/SearchArrayTest.java | 106 ++++++++++-------- 2 files changed, 81 insertions(+), 46 deletions(-) create mode 100644 core-java/src/main/java/com/baeldung/array/ArrayBenchmarkRunner.java rename core-java/src/{test => main}/java/com/baeldung/array/SearchArrayTest.java (57%) diff --git a/core-java/src/main/java/com/baeldung/array/ArrayBenchmarkRunner.java b/core-java/src/main/java/com/baeldung/array/ArrayBenchmarkRunner.java new file mode 100644 index 0000000000..977587a06a --- /dev/null +++ b/core-java/src/main/java/com/baeldung/array/ArrayBenchmarkRunner.java @@ -0,0 +1,21 @@ +package com.baeldung.array; + +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.options.Options; +import org.openjdk.jmh.runner.options.OptionsBuilder; + +public class ArrayBenchmarkRunner { + + public static void main(String[] args) throws Exception { + + Options options = new OptionsBuilder() + .include(SearchArrayTest.class.getSimpleName()).threads(1) + .forks(1).shouldFailOnError(true).shouldDoGC(true) + .jvmArgs("-server").build(); + + new Runner(options).run(); + + + } + +} diff --git a/core-java/src/test/java/com/baeldung/array/SearchArrayTest.java b/core-java/src/main/java/com/baeldung/array/SearchArrayTest.java similarity index 57% rename from core-java/src/test/java/com/baeldung/array/SearchArrayTest.java rename to core-java/src/main/java/com/baeldung/array/SearchArrayTest.java index 94911baac9..fd11e49373 100644 --- a/core-java/src/test/java/com/baeldung/array/SearchArrayTest.java +++ b/core-java/src/main/java/com/baeldung/array/SearchArrayTest.java @@ -1,78 +1,92 @@ package com.baeldung.array; -import org.junit.Test; +import org.openjdk.jmh.annotations.*; import java.util.*; +import java.util.concurrent.TimeUnit; public class SearchArrayTest { - - @Test - public void searchArrayAllocNewCollections() { + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @Warmup(iterations = 5) + @OutputTimeUnit(TimeUnit.MICROSECONDS) + public void searchArrayLoop() { int count = 1000; - String[] strings = seedArray(count); + for (int i = 0; i < count; i++) { + searchLoop(strings, "T"); + } + } - long startTime = System.nanoTime(); + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @Warmup(iterations = 5) + @OutputTimeUnit(TimeUnit.MICROSECONDS) + public void searchArrayAllocNewList() { + + int count = 1000; + String[] strings = seedArray(count); for (int i = 0; i < count; i++) { searchList(strings, "W"); } - long duration = System.nanoTime() - startTime; - System.out.println("SearchList: " + duration / 10000); - startTime = System.nanoTime(); - for (int i = 0; i < count; i++) { - searchSet(strings,"S"); - } - duration = System.nanoTime() - startTime; - System.out.println("SearchSet: " + duration / 10000); - - startTime = System.nanoTime(); - for (int i = 0; i < count; i++) { - searchLoop(strings, "T"); - } - duration = System.nanoTime() - startTime; - System.out.println("SearchLoop: " + duration / 10000); } - @Test - public void searchArrayReuseCollections() { + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @Warmup(iterations = 5) + @OutputTimeUnit(TimeUnit.MICROSECONDS) + public void searchArrayAllocNewSet() { - int count = 10000; + int count = 1000; + String[] strings = seedArray(count); + for (int i = 0; i < count; i++) { + searchSet(strings, "S"); + } + } + + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @Warmup(iterations = 5) + @OutputTimeUnit(TimeUnit.MICROSECONDS) + public void searchArrayReuseList() { + + int count = 1000; String[] strings = seedArray(count); List asList = Arrays.asList(strings); - Set asSet = new HashSet<>(Arrays.asList(strings)); - long startTime = System.nanoTime(); for (int i = 0; i < count; i++) { asList.contains("W"); } - long duration = System.nanoTime() - startTime; - System.out.println("List: " + duration / 10000); - - startTime = System.nanoTime(); - for (int i = 0; i < count; i++) { - asSet.contains("S"); - } - duration = System.nanoTime() - startTime; - System.out.println("Set: " + duration / 10000); - - startTime = System.nanoTime(); - for (int i = 0; i < count; i++) { - searchLoop(strings, "T"); - } - duration = System.nanoTime() - startTime; - System.out.println("Loop: " + duration / 10000); - } - @Test + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @Warmup(iterations = 5) + @OutputTimeUnit(TimeUnit.MICROSECONDS) + public void searchArrayReuseSet() { + + int count = 1000; + String[] strings = seedArray(count); + Set asSet = new HashSet<>(Arrays.asList(strings)); + for (int i = 0; i < count; i++) { + asSet.contains("S"); + } + } + + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @Warmup(iterations = 5) + @OutputTimeUnit(TimeUnit.MICROSECONDS) public void searchArrayBinarySearch() { - int count = 10000; + int count = 1000; String[] strings = seedArray(count); Arrays.sort(strings); @@ -81,7 +95,7 @@ public class SearchArrayTest { Arrays.binarySearch(strings, "A"); } long duration = System.nanoTime() - startTime; - System.out.println("Binary search: " + duration / 10000); + //System.out.println("Binary search: " + duration / 10000); }