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;