diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
index e7fe5798c..ca214d83a 100644
--- a/benchmarks/pom.xml
+++ b/benchmarks/pom.xml
@@ -16,7 +16,8 @@
${basedir}/..
- 1.33
+ 1.34
+ 1.12.7benchmarksUTF-8
@@ -38,6 +39,11 @@
${jmh.version}provided
+
+ net.bytebuddy
+ byte-buddy
+ ${byte-buddy.version}
+
diff --git a/benchmarks/src/main/java/com/esotericsoftware/kryo/benchmarks/MapBenchmark.java b/benchmarks/src/main/java/com/esotericsoftware/kryo/benchmarks/MapBenchmark.java
new file mode 100644
index 000000000..930a7e608
--- /dev/null
+++ b/benchmarks/src/main/java/com/esotericsoftware/kryo/benchmarks/MapBenchmark.java
@@ -0,0 +1,259 @@
+/* Copyright (c) 2008-2018, Nathan Sweet
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the distribution.
+ * - Neither the name of Esoteric Software nor the names of its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
+
+package com.esotericsoftware.kryo.benchmarks;
+
+import com.esotericsoftware.kryo.util.CuckooObjectMap;
+import com.esotericsoftware.kryo.util.IdentityMap;
+import com.esotericsoftware.kryo.util.ObjectMap;
+
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Random;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.Level;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.infra.Blackhole;
+
+import net.bytebuddy.ByteBuddy;
+
+public class MapBenchmark {
+
+ @Benchmark
+ public void read (ReadBenchmarkState state, Blackhole blackhole) {
+ state.read(blackhole);
+ }
+
+ @Benchmark
+ public void write (WriteBenchmarkState state, Blackhole blackhole) {
+ state.write(blackhole);
+ }
+
+ @Benchmark
+ public void writeRead (WriteBenchmarkState state, Blackhole blackhole) {
+ state.readWrite(blackhole);
+ }
+
+ @State(Scope.Thread)
+ public static class AbstractBenchmarkState {
+ @Param({"100", "500", "3000", "5000"}) public int numClasses;
+ @Param({"8192"}) public int maxCapacity;
+ @Param({"OBJECT", "IDENTITY", "CUCKOO", "HASH"}) public MapType mapType;
+ @Param({"STRINGS", "INTEGERS", "CLASSES"}) public DataSource dataSource;
+
+ MapAdapter