private final static ThreadLocal<char[]> charsLocal = new ThreadLocal<char[]>();
private static char[] allocateChars(int length) {
char[] chars = charsLocal.get();
if (chars == null) {
if (length <= 1024 * 64) {
chars = new char[1024 * 64];
charsLocal.set(chars);
} else {
chars = new char[length];
}
} else if (chars.length < length) {
chars = new char[length];
}
return chars;
}
直接使用65536个字符是不是太浪费了?大部分场景下都是小对象,但是65536直接内存常驻,利用率非常低,内存水位直接被ThreadLocal拉高,无法GC掉。大对象用不到,小对象还浪费……