diff --git a/common/src/main/java/io/netty/util/internal/TypeParameterFinder.java b/common/src/main/java/io/netty/util/internal/TypeParameterFinder.java index 55bdcb25bb..8299be9944 100644 --- a/common/src/main/java/io/netty/util/internal/TypeParameterFinder.java +++ b/common/src/main/java/io/netty/util/internal/TypeParameterFinder.java @@ -18,16 +18,21 @@ package io.netty.util.internal; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; +import java.util.IdentityHashMap; +import java.util.Map; public final class TypeParameterFinder { - // TODO: Use a weak key map - private static final ConcurrentMap, Class> typeMap = new ConcurrentHashMap, Class>(); + private static final ThreadLocal, Class>> typeMap = new ThreadLocal, Class>>() { + @Override + protected Map, Class> initialValue() { + return new IdentityHashMap, Class>(); + } + }; public static Class findActualTypeParameter( final Object object, final Class parameterizedSuperClass, final int typeParamIndex) { + final Map, Class> typeMap = TypeParameterFinder.typeMap.get(); final Class thisClass = object.getClass(); Class messageType = typeMap.get(thisClass); if (messageType == null) {