From 71a6aa7e711079ad606bd91cd90609575533c77e Mon Sep 17 00:00:00 2001 From: Bruce Eckel Date: Fri, 5 Aug 2016 16:07:30 -0600 Subject: [PATCH] Initial Reasonable JMH example working --- .../jmhtests/MapPerformance.java | 81 +++++++++++++++++++ .../jmhtests/MapPerformanceJMH.java | 66 --------------- 2 files changed, 81 insertions(+), 66 deletions(-) create mode 100644 understandingcollections/jmhtests/MapPerformance.java delete mode 100644 understandingcollections/jmhtests/MapPerformanceJMH.java diff --git a/understandingcollections/jmhtests/MapPerformance.java b/understandingcollections/jmhtests/MapPerformance.java new file mode 100644 index 00000000..7b6bea7b --- /dev/null +++ b/understandingcollections/jmhtests/MapPerformance.java @@ -0,0 +1,81 @@ +// understandingcollections/jmhtests/MapPerformance.java +// (c)2016 MindView LLC: see Copyright.txt +// We make no guarantees that this code is fit for any purpose. +// Visit http://mindviewinc.com/Books/OnJava/ for more book information. +// Performance differences between Maps +package understandingcollections.jmhtests; +import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.Blackhole; +import java.util.*; +import static java.util.concurrent.TimeUnit.*; + +@State(Scope.Thread) +@Warmup(iterations = 5, time = 1, timeUnit = SECONDS) +@Measurement(iterations = 5, time = 1, timeUnit = SECONDS) +@Fork(1) +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(NANOSECONDS) +public class MapPerformance { + private Map map; + + @Param({"hashmap", "treemap", "linkedhashmap", + "identityhashmap", "weakhashmap", "hashtable"}) + private String type; + + private int begin; + private int end; + + @Setup + public void setup() { + switch(type) { + case "hashmap": + map = new HashMap<>(); + break; + case "treemap": + map = new TreeMap<>(); + break; + case "linkedhashmap": + map = new LinkedHashMap<>(); + break; + case "identityhashmap": + map = new IdentityHashMap<>(); + break; + case "weakhashmap": + map = new WeakHashMap<>(); + break; + case "hashtable": + map = new Hashtable<>(); + break; + default: + throw new IllegalStateException("Unknown " + type); + } + + begin = 1; + end = 256; + for (int i = begin; i < end; i++) { + map.put(i, i); + } + } + + @Benchmark + public void get(Blackhole bh) { + for (int i = begin; i < end; i++) { + bh.consume(map.get(i)); + } + } + + @Benchmark + public void put(Blackhole bh) { + for (int i = begin; i < end; i++) { + bh.consume(map.put(i, i)); + } + } + + @Benchmark + public void iterate(Blackhole bh) { + Iterator it = map.entrySet().iterator(); + while(it.hasNext()) + bh.consume(it.next()); + } + +} diff --git a/understandingcollections/jmhtests/MapPerformanceJMH.java b/understandingcollections/jmhtests/MapPerformanceJMH.java deleted file mode 100644 index 2e50d449..00000000 --- a/understandingcollections/jmhtests/MapPerformanceJMH.java +++ /dev/null @@ -1,66 +0,0 @@ -// understandingcollections/jmhtests/MapPerformanceJMH.java -// (c)2016 MindView LLC: see Copyright.txt -// We make no guarantees that this code is fit for any purpose. -// Visit http://mindviewinc.com/Books/OnJava/ for more book information. -// Demonstrates performance differences in Maps -package understandingcollections.jmhtests; -import org.openjdk.jmh.annotations.*; -import org.openjdk.jmh.infra.Blackhole; -import java.util.*; - -@State(Scope.Thread) -public class MapPerformanceJMH { - private Map map; - - @Param({"hashmap", "treemap"}) - private String type; - - private int begin; - private int end; - - @Setup - public void setup() { - if (type.equals("hashmap")) { - map = new HashMap(); - } else if (type.equals("treemap")) { - map = new TreeMap(); - } else { - throw new IllegalStateException("Unknown type: " + type); - } - - begin = 1; - end = 256; - for (int i = begin; i < end; i++) { - map.put(i, i); - } - } - - @Benchmark - public void get(Blackhole bh) { - for (int i = begin; i < end; i++) { - bh.consume(map.get(i)); - } - } - -// These are incomplete placeholders from the -// original MapPerformance.jaava: -/* @Benchmark - int put() { - for(int i = 0; i < loops; i++) { - map.clear(); - for(int j = 0; j < size; j++) - map.put(j, j); - } - return loops * size; - }*/ - -/* @Benchmark - int iterate() { - for(int i = 0; i < loops; i ++) { - Iterator it = map.entrySet().iterator(); - while(it.hasNext()) - it.next(); - } - }*/ - -}