一.功能介绍
功能: 用于实现高效的多线程内存管理(替代系统的内存分配相关的函数(malloc, free))
- 性能的提升: 池化技术, 锁竞争的减小
- 处理内存碎片: 内碎片, 外碎片
池化技术:
- 概念:预先向系统申请过量的资源, 自己管理.->提高性能(每次申请资源都有较大的开销, 提前申请好, 使用的时候就快)
- 内存池: 预先申好大块内存自己管理, 程序申请空间时向内存池申请, 释放还给内存池
锁竞争的减小
- tcmalloc采用TLS(本地缓存机制), 每个线程独享一段内存缓冲区, 无需加锁
- CentralCache采用桶锁->竞争粒度更小(多线程向同一桶申请内存才会竞争)
- PageCache使用基数树优化后,通过PageID获取Span无需加锁(且高度低,查询更快)
内碎片
- 概念: 内存对齐导致部分空间的浪费
- 处理: 采用分段对齐, 使内存对齐所浪费的比例不超过10%
外碎片
- 概念: 空闲的内存分散在堆上(程序申请大块内存时, 空间够但由于不连续导致无法分配)
- 处理: 以页为单位分配Span对象, PageCache回收时会合并相邻的页
二.核心思想
高并发内存池: 3层缓存机制,
- ThreadCache: 每个线程独有, 做小块内存的分配,
- CentralCache: 给上一层分配内存, 合适的时候回收
- PageCache: 给上一层分配内存, 合适的时候回收并合并相邻的页
ThreadCache : 用于小对象的分配于回收
CentralCache(单例) : 均衡调度
PageCache(单例) : 管理大块内存的分配于回收