netty框架实现的简化版本
目前实现功能:
小块内存请求,优先从threadCache分配。
有一个大的chunk,默认大小为16M。
chunk由n个page构成。
内存分配设计跟netty类似,由一个数组构造出一棵完全二叉树。
叶子结点对应具体page结点的内存使用情况,非叶子结点记录了对应它的所有子结点的使用情况。
内存使用情况有三种状态:0-未分配 1-部分分配 2-已全部分配
整个内存池设计涉及类:
PoolChunk:
一个完整的chunk类,职责是维护物理内存,以及这个chunk内page的分配逻辑。
PoolBuf:
用户申请内存后,得到的是这个对象。目前只有direct实现。这个对象最终读写是跟chunk对应的物理内存块交互。这个类只是维护了逻辑位置。
PoolArena:
内存分配类,职责是:
线程缓存的内存对象,内存有多个chunk实例对象,每个线程独有。
PoolThreadCache:
git地址:
https://github.com/zhaozhenzuo/nettyProject
目前实现功能:
1.server启动boss及work线程监听客户端连接及处理读写操作
2.direct内存池
小块内存请求,优先从threadCache分配。
有一个大的chunk,默认大小为16M。
chunk由n个page构成。
内存分配设计跟netty类似,由一个数组构造出一棵完全二叉树。
叶子结点对应具体page结点的内存使用情况,非叶子结点记录了对应它的所有子结点的使用情况。
内存使用情况有三种状态:0-未分配 1-部分分配 2-已全部分配
整个内存池设计涉及类:
PoolChunk:
一个完整的chunk类,职责是维护物理内存,以及这个chunk内page的分配逻辑。
PoolBuf:
用户申请内存后,得到的是这个对象。目前只有direct实现。这个对象最终读写是跟chunk对应的物理内存块交互。这个类只是维护了逻辑位置。
PoolArena:
内存分配类,职责是:
小于等于一个page大小的内存请求优先从threadCache分配,大于一个page的从公共内存池获取(目前未实现)。
线程独有。
MemCache:线程缓存的内存对象,内存有多个chunk实例对象,每个线程独有。
PoolThreadCache:
实现线程缓存对象的存取,内部poolArena线程独有。