You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/08/07 15:12:18 UTC

logging-log4j2 git commit: LOG4J2-1447 Added benchmarks for OpenHashMapContextData

Repository: logging-log4j2
Updated Branches:
  refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure a6a6bd407 -> b3a4e9e7e


LOG4J2-1447 Added benchmarks for OpenHashMapContextData


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/b3a4e9e7
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/b3a4e9e7
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/b3a4e9e7

Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: b3a4e9e7e5ace21e97b79882ade19761b298fc29
Parents: a6a6bd4
Author: rpopma <rp...@apache.org>
Authored: Mon Aug 8 00:12:21 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Mon Aug 8 00:12:21 2016 +0900

----------------------------------------------------------------------
 .../jmh/ArrayContextDataVsHashMapBenchmark.java | 80 ++++++++++++++++++--
 1 file changed, 72 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b3a4e9e7/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ArrayContextDataVsHashMapBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ArrayContextDataVsHashMapBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ArrayContextDataVsHashMapBenchmark.java
index 62a609d..9587e2d 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ArrayContextDataVsHashMapBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ArrayContextDataVsHashMapBenchmark.java
@@ -23,6 +23,7 @@ import java.util.Random;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.logging.log4j.core.impl.ArrayContextData;
+import org.apache.logging.log4j.core.impl.OpenHashMapContextData;
 import org.apache.logging.log4j.core.util.BiConsumer;
 import org.apache.logging.log4j.core.util.TriConsumer;
 import org.openjdk.jmh.annotations.Benchmark;
@@ -60,7 +61,8 @@ import org.openjdk.jmh.annotations.Warmup;
 public class ArrayContextDataVsHashMapBenchmark {
 
     //@Param({"1", "2", "5", "11", "23", "47", "95", "191", "383"})
-    @Param({"1", "5", "50", "500"})
+    //@Param({"1", "5", "50", "500"})
+    @Param({ "5",  "500"})
     public int count;
 
     //@Param({"5", "50"})
@@ -71,12 +73,15 @@ public class ArrayContextDataVsHashMapBenchmark {
     private static Object value = new Object();
     private HashMap<String, Object> map;
     private ArrayContextData contextData;
+    private OpenHashMapContextData<String, Object> hashContextData;
 
     private HashMap<String, Object> populatedMap;
     private ArrayContextData populatedContextData;
+    private OpenHashMapContextData<String, Object> populatedHashContextData;
 
     @Setup
     public void setup() {
+        hashContextData = new OpenHashMapContextData<>();
         contextData = new ArrayContextData();
         map = new HashMap<>();
 
@@ -98,16 +103,27 @@ public class ArrayContextDataVsHashMapBenchmark {
         for (int i = 0; i < count; i++) {
             populatedContextData.putValue(keys[i], value);
         }
+        populatedHashContextData = new OpenHashMapContextData<>();
+        for (int i = 0; i < count; i++) {
+            populatedHashContextData.putValue(keys[i], value);
+        }
     }
 
     @Benchmark
-    public ArrayContextData putAllContextData() {
+    public ArrayContextData putAllArrayContextData() {
         contextData.clear();
         contextData.putAll(populatedContextData);
         return contextData;
     }
 
     @Benchmark
+    public OpenHashMapContextData<String, Object> putAllHashContextData() {
+        hashContextData.clear();
+        hashContextData.putAll(populatedHashContextData);
+        return hashContextData;
+    }
+
+    @Benchmark
     public Map putAllMap() {
         map.clear();
         map.putAll(populatedMap);
@@ -115,11 +131,16 @@ public class ArrayContextDataVsHashMapBenchmark {
     }
 
     @Benchmark
-    public ArrayContextData cloneContextData() {
+    public ArrayContextData cloneArrayContextData() {
         return new ArrayContextData(populatedContextData);
     }
 
     @Benchmark
+    public OpenHashMapContextData<String, Object> cloneHashContextData() {
+        return new OpenHashMapContextData<>(populatedHashContextData);
+    }
+
+    @Benchmark
     public Map cloneMap() {
         return new HashMap(populatedMap);
     }
@@ -132,7 +153,7 @@ public class ArrayContextDataVsHashMapBenchmark {
     };
 
     @Benchmark
-    public int iterateContextDataTriConsumer() {
+    public int iterateArrayContextDataTriConsumer() {
         final int[] result = {0};
 
         populatedContextData.forEach(COUNTER, result);
@@ -140,7 +161,15 @@ public class ArrayContextDataVsHashMapBenchmark {
     }
 
     @Benchmark
-    public int iterateContextDataBiConsumer() {
+    public int iterateHashContextDataTriConsumer() {
+        final int[] result = {0};
+
+        populatedHashContextData.forEach(COUNTER, result);
+        return result[0];
+    }
+
+    @Benchmark
+    public int iterateArrayContextDataBiConsumer() {
         final int[] result = {0};
 
         populatedContextData.forEach(new BiConsumer<String, Object>() {
@@ -153,6 +182,19 @@ public class ArrayContextDataVsHashMapBenchmark {
     }
 
     @Benchmark
+    public int iterateHashContextDataBiConsumer() {
+        final int[] result = {0};
+
+        populatedHashContextData.forEach(new BiConsumer<String, Object>() {
+            @Override
+            public void accept(String s, Object o) {
+                result[0] += s.hashCode() + o.hashCode();
+            }
+        });
+        return result[0];
+    }
+
+    @Benchmark
     public int iterateMap() {
         final int[] result = {0};
 
@@ -163,7 +205,7 @@ public class ArrayContextDataVsHashMapBenchmark {
     }
 
     @Benchmark
-    public int getContextData() {
+    public int getValueArrayContextData() {
         String[] theKeys = keys;
         int c = count;
         int result = 0;
@@ -175,7 +217,19 @@ public class ArrayContextDataVsHashMapBenchmark {
     }
 
     @Benchmark
-    public int getMap() {
+    public int getValueHashContextData() {
+        String[] theKeys = keys;
+        int c = count;
+        int result = 0;
+        for (int i = 0; i < c; i++) {
+            Object val = populatedHashContextData.getValue(theKeys[i]);
+            result += val.hashCode();// + theKeys[i].hashCode();
+        }
+        return result;
+    }
+
+    @Benchmark
+    public int getValueMap() {
         String[] theKeys = keys;
         int c = count;
         int result = 0;
@@ -187,7 +241,7 @@ public class ArrayContextDataVsHashMapBenchmark {
     }
 
     @Benchmark
-    public int putContextData() {
+    public int putArrayContextData() {
         String[] theKeys = keys;
         int c = count;
         for (int i = 0; i < c; i++) {
@@ -197,6 +251,16 @@ public class ArrayContextDataVsHashMapBenchmark {
     }
 
     @Benchmark
+    public int putHashContextData() {
+        String[] theKeys = keys;
+        int c = count;
+        for (int i = 0; i < c; i++) {
+            hashContextData.putValue(theKeys[i], value);
+        }
+        return hashContextData.size();
+    }
+
+    @Benchmark
     public int putMap() {
         String[] theKeys = keys;
         int c = count;