文章

Netty 如何实现内存管理?

Netty 如何实现内存管理?

这个题目,简单了解即可,如果深入,就要去看 《精尽 Netty 源码解析 —— Buffer》 相关的源码。而且,看完就忘记,比较难和复杂。

当然,看懂那一刻,乐趣无穷,哈哈哈哈。

Netty 内存管理机制,基于 Jemalloc 算法。

  • 首先会预申请一大块内存 Arena ,Arena 由许多 Chunk 组成,而每个 Chunk 默认由2048个page组成。
  • Chunk 通过 AVL 树的形式组织 Page ,每个叶子节点表示一个 Page ,而中间节点表示内存区域,节点自己记录它在整个 Arena 中的偏移地址。当区域被分配出去后,中间节点上的标记位会被标记,这样就表示这个中间节点以下的所有节点都已被分配了。大于 8k 的内存分配在 PoolChunkList 中,而 PoolSubpage 用于分配小于 8k 的内存,它会把一个 page 分割成多段,进行内存分配。
本文由作者按照 CC BY 4.0 进行授权