本文主要是介绍Netty源码分析:PoolChunk,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Netty源码分析:PoolChunk
Chunk主要用来组织和管理多个Page的内存分配和释放。在Netty中,Chunk中的Page被构建成一颗二叉树。本博文将从源码的角度来看下PoolChunk。
1、属性和构造函数
先看下PoolChunk的属性和构造函数
final class PoolChunk<T> {// PoolChunk会涉及到具体的内存,泛型T表示byte[](堆内存)、或java.nio.ByteBuffer(堆外内存) final PoolArena<T> arena;//表示该PoolChunk所属的PoolArena。 final T memory;// 具体用来表示内存;byte[]或java.nio.ByteBuffer。 final boolean unpooled;// 是否是可重用的,unpooled=false表示可重用 private final byte[] memoryMap;private final byte[] depthMap;private final PoolSubpage<T>[] subpages;//表示该PoolChunk所包含的PoolSubpage。也就是PoolChunk连续的可用内存。/** Used to determine if the requested capacity is equal to or greater than pageSize. */private final int subpageOverflowMask;private final int pageSize;//每个PoolSubpage的大小,默认为8192个字节(8K) private final int pageShifts;private final int maxOrder;private final int chunkSize;private final int log2ChunkSize;private final int maxSubpageAllocs;/** Used to mark memory as unusable */private final byte unusable;private int freeBytes; //当前PoolChunk空闲的内存。 PoolChunkList<T> parent;//一个PoolChunk分配后,会根据使用率挂在PoolArena的一个PoolChunkList中// PoolChunk本身设计为一个链表结构PoolChunk<T> prev;PoolChunk<T> next;PoolChunk(PoolArena<T> arena, T memory, int pageSize, int maxOrder, int pageShifts, int chunkSize) {unpooled = false;this.arena = arena;this.memory = memory;
这篇关于Netty源码分析:PoolChunk的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!