From 1eafffbec57dded19909fb83b7a17e91cb648f4c Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Fri, 8 Feb 2013 17:24:29 +0900 Subject: [PATCH] Use thread-local map instead of ConcurrentHashMap for faster instantiation of handler adapters --- .../io/netty/util/internal/TypeParameterFinder.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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) {