Netty 内存池设计之总体管理

本文深入探讨了Netty内存池的设计,特别关注了子页管理算法,如何处理小于内存页的内存申请,提高内存页利用率。通过位图管理等分的子页,有效地减少了内存浪费。同时,介绍了内存池的整体结构,包括内存块管理、线程缓存等,以提升并发性能并降低锁竞争。最后,概述了内存池内存分配的完整逻辑,为理解Netty内存管理提供了清晰的脉络。
摘要由CSDN通过智能技术生成

引言

前文我们分析了内存分配的相关算法,以及其在 Netty 当中的变种和代码实现。之前在内存块中申请内存,申请大小都大于一个内存页的大小。而如果在申请大小小于一个内存页时也分配一个内存页,就显得很浪费了。为此,Netty 设计了专门的子页分配算法,用于处理小内存的分配场景。

子页管理算法

对于小于一个内存页大小的内存申请,首先也是需要在内存块上执行申请的,成功后就会得到一个内存页的空间。现在的问题就转化为一个内存页的空间上,如何避免小内存的申请而浪费一个内存页的剩余空间。最容易的想到的就是,将小内存也按照内存块的算法分配思路再来一次。不过内存块的分配算法是需要额外的空间来存储元数据信息(二叉树节点相关信息),如果对于内存页也采用这种模式,元数据信息的开销相比于内存页本身的大小,占比太高太不划算,显然不能采用这种方式。

在 Netty 中,对于小内存的分配,是将一个内存页按照小内存的大小,拆成相同大小的 N 份,将这种模式下的内存页称之为子页。在 Netty 的内存申请中,所有的申请大小都是按照 2 的次方幂进行规范化处理的。因此将一个内存页拆分等分的 N 份,后续仍然会遇到相同大小的小内存申请,就可以直接从这个子页中进行分配,而不需要从内存块中再次申请一个新的内存页,提升了内存页的利用率。

例如说,一个内存页为 8k 的大小࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值