diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
index 24b132ae2..39e3248f1 100644
--- a/benchmarks/pom.xml
+++ b/benchmarks/pom.xml
@@ -38,6 +38,13 @@
${jmh.version}
provided
+
+
+ net.bytebuddy
+ byte-buddy
+ 1.9.4
+
+
diff --git a/benchmarks/src/main/java/com/esotericsoftware/kryo/benchmarks/utils/FastGetIntMapBenchmark.java b/benchmarks/src/main/java/com/esotericsoftware/kryo/benchmarks/utils/FastGetIntMapBenchmark.java
new file mode 100644
index 000000000..7b3d59a8c
--- /dev/null
+++ b/benchmarks/src/main/java/com/esotericsoftware/kryo/benchmarks/utils/FastGetIntMapBenchmark.java
@@ -0,0 +1,198 @@
+package com.esotericsoftware.kryo.benchmarks.utils;
+
+import com.esotericsoftware.kryo.util.*;
+
+import java.util.*;
+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;
+import net.bytebuddy.implementation.FixedValue;
+import net.bytebuddy.matcher.ElementMatchers;
+
+// mvn -f benchmarks/pom.xml compile exec:java -Dexec.args="-f 3 -wi 6 -i 3 -t 2 -w 2s -r 2 FastGetObjectMapBenchmark.read"
+public class FastGetIntMapBenchmark {
+
+ @Benchmark
+ public void read (ReadBenchmarkState state, Blackhole blackhole) {
+ state.read(blackhole);
+ }
+
+ @Benchmark
+ public void write (BenchmarkState state, Blackhole blackhole) {
+ state.write(blackhole);
+ }
+
+ @Benchmark
+ public void writeRead (BenchmarkState state, Blackhole blackhole) {
+ state.readWrite(blackhole);
+ }
+
+ @State(Scope.Thread)
+ public static class AbstractBenchmarkState {
+ @Param({"500", "1000", "3000", "10000"}) public int numClasses;
+ @Param({"2048"}) public int maxCapacity;
+ @Param({"intMap", "fastGetIntMap"}) public MapType mapType;
+
+ IntObjectMapAdapter