PooledByteBufAllocator
属生
public static final PooledByteBufAllocator DEFAULT =
new PooledByteBufAllocator(PlatformDependent.directBufferPreferred());
private final PoolArena[] heapArenas; //一般是2倍CPU核心数
private final PoolArena[] directArenas;//一般是2倍CPU核心数
private final int tinyCacheSize;//512
private final int smallCacheSize;//256
private final int normalCacheSize;//64
private final List heapArenaMetrics;
private final List directArenaMetrics;
private final PoolThreadLocalCache threadCache;//线程局部变量
private final int chunkSize;//PoolChunk 的总内存
private final PooledByteBufAllocatorMetric metric;
内存分配
@Override
protected ByteBuf newDirectBuffer(int initialCapacity, int maxCapacity) {
PoolThreadCache cache = threadCache.get();//从线程局部变量获取一个,每个线程局部变量获取的对象不一样
PoolArena directArena = cache.directArena;//基本上每个核心的值不一样
final ByteBuf buf;
if (directArena != null) {
buf = directArena.allocate(cache, initialCapacity, maxCapacity);//分配
} else {
buf = PlatformDependent.hasUnsafe() ?
UnsafeByteBufUtil.newUnsafeDirectByteBuf(this, initialCapacity, maxCapacity) :
new UnpooledDirectByteBuf(this, initialCapacity, maxCapacity);
}
return toLeakAwareBuffer(buf);//追踪内存泄漏
}