Netty的内存池、对象池是怎么实现的?

Slab分配算法

  • 内存切分为不同大小的内存块,在请求的时候分配大小贴近的内存块
  • 减少内存碎片,避免内存浪费

    Buddy分配算法

  • 将一块内存块等量进行分割,回收的时候进行合并,尽可能保证有大块的连续内存

image.png

  • 一个Arena区域由 2个PoolSubPage 和 多个PoolChunkList 组成
  • 默认一个Chunk包含2048个Page,每个Page大小为8KB

  • tinySubpagePools用于分配小于512字节的内存

  • smallSubpagePools 用于分配大于512 小于 pageSize (8K) 的内存
  • PoolChunkList 用于分配 大于pageSize (8K) 小于chunk大小(16M)的内存
  • 大于chunk大小的内存在非池化分配