netty的内存管理

1,205 阅读1分钟

1、内存分配器

ByteBufAllocator
说明:默认实现是根据io.netty.allocator.type的属性值来创建的(unpooled或pooled),
    如果该属性没有设置,会判断当前平台是否是Android,是(unpooled),否(pooled)。
    根据上面的类型会调用对应的UnpooledByteBufAllocator或PooledByteBufAllocator
PooledByteBufAllocator
说明:静态代码块中的实现,通过获取io.netty.allocator.pageSize的值,给DEFAULT_PAGE_SIZE赋值,默认8192;
    通过获取io.netty.allocator.maxOrder的值,给DEFAULT_MAX_ORDER赋值,默认11;
    DEFAULT_NUM_HEAP_ARENA = io.netty.allocator.numHeapArenas,默认
    DEFAULT_NUM_DIRECT_ARENA = io.netty.allocator.numDirectArenas,默认
    DEFAULT_TINY_CACHE_SIZE = io.netty.allocator.tinyCacheSize,默认512
    DEFAULT_SMALL_CACHE_SIZE = io.netty.allocator.smallCacheSize,默认256
    DEFAULT_NORMAL_CACHE_SIZE = io.netty.allocator.normalCacheSize,默认64
    DEFAULT_MAX_CACHED_BUFFER_CAPACITY = io.netty.allocator.maxCachedBufferCapacity,默认32*1024
    DEFAULT_CACHE_TRIM_INTERVAL = io.netty.allocator.cacheTrimInterval,默认8192
    DEFAULT_CACHE_TRIM_INTERVAL_MILLIS = io.netty.allocation.cacheTrimIntervalMillis,默认0
    DEFAULT_USE_CACHE_FOR_ALL_THREADS = io.netty.allocator.useCacheForAllThreads,默认true
    DEFAULT_DIRECT_MEMORY_CACHE_ALIGNMENT = io.netty.allocator.directMemoryCacheAlignment,默认0
    DEFAULT_MAX_CACHED_BYTEBUFFERS_PER_CHUNK = io.netty.allocator.maxCachedByteBuffersPerChunk,默认1023
PoolThreadCache
PoolArena
PoolChunk

2、流程(默认实现)

io.netty.buffer.PooledByteBufAllocator#newHeapBuffer
    1、先获取PoolThreadCache;
    2、从PoolThreadCache中获取PoolArena<byte[]>;
io.netty.buffer.PoolArena#allocate
    1、PooledHeapByteBuf.newInstance(maxCapacity);
    2、根据normCapacity的大小采用不同的策略分配
        PoolThreadCache#allocateTiny