diff --git a/common/src/main/java/io/netty/util/internal/InternalThreadLocalMap.java b/common/src/main/java/io/netty/util/internal/InternalThreadLocalMap.java index 2100b14233..a0d186e74b 100644 --- a/common/src/main/java/io/netty/util/internal/InternalThreadLocalMap.java +++ b/common/src/main/java/io/netty/util/internal/InternalThreadLocalMap.java @@ -18,6 +18,8 @@ package io.netty.util.internal; import io.netty.util.concurrent.FastThreadLocal; import io.netty.util.concurrent.FastThreadLocalThread; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; @@ -35,10 +37,23 @@ import java.util.WeakHashMap; */ public final class InternalThreadLocalMap extends UnpaddedInternalThreadLocalMap { + private static final InternalLogger logger = InternalLoggerFactory.getInstance(InternalThreadLocalMap.class); + private static final int DEFAULT_ARRAY_LIST_INITIAL_CAPACITY = 8; + private static final int STRING_BUILDER_INITIAL_SIZE; + private static final int STRING_BUILDER_MAX_SIZE; public static final Object UNSET = new Object(); + static { + STRING_BUILDER_INITIAL_SIZE = + SystemPropertyUtil.getInt("io.netty.threadLocalMap.stringBuilder.initialSize", 1024); + logger.debug("-Dio.netty.threadLocalMap.stringBuilder.initialSize: {}", STRING_BUILDER_INITIAL_SIZE); + + STRING_BUILDER_MAX_SIZE = SystemPropertyUtil.getInt("io.netty.threadLocalMap.stringBuilder.maxSize", 1024 * 4); + logger.debug("-Dio.netty.threadLocalMap.stringBuilder.maxSize: {}", STRING_BUILDER_MAX_SIZE); + } + public static InternalThreadLocalMap getIfSet() { Thread thread = Thread.currentThread(); if (thread instanceof FastThreadLocalThread) { @@ -163,17 +178,16 @@ public final class InternalThreadLocalMap extends UnpaddedInternalThreadLocalMap } public StringBuilder stringBuilder() { - final int stringBuilderCapacity = 1024; - if (stringBuilder == null) { - stringBuilder = new StringBuilder(stringBuilderCapacity); - } else { - if (stringBuilder.capacity() > stringBuilderCapacity) { - stringBuilder.setLength(stringBuilderCapacity); - stringBuilder.trimToSize(); - } - stringBuilder.setLength(0); + StringBuilder sb = stringBuilder; + if (sb == null) { + return stringBuilder = new StringBuilder(STRING_BUILDER_INITIAL_SIZE); } - return stringBuilder; + if (sb.capacity() > STRING_BUILDER_MAX_SIZE) { + sb.setLength(STRING_BUILDER_INITIAL_SIZE); + sb.trimToSize(); + } + sb.setLength(0); + return sb; } public Map charsetEncoderCache() {