tcmalloc
2023-07-24 本文已影响0人
robertzhai



https://zhuanlan.zhihu.com/p/29216091
-
threadCache(单个线程内部) => CentralCache(多个线程共享) => Pageheap(1 个 page 8k,不同的page 构成不同的span) 的3级结构
-
<=256k 的对象空间 按 threadCache-》CentralCache=>Pageheap 顺序进行分配
-
256 的对象空间 直接到PageHeap 分配
-
每个线程都一个线程局部的 ThreadCache,按照不同的规格,维护了对象的链表;如果ThreadCache 的对象不够了,就从 CentralCache 进行批量分配;如果 CentralCache 依然没有,就从PageHeap申请Span;如果 PageHeap没有合适的 Page,就只能从操作系统申请了。
-
在释放内存的时候,ThreadCache依然遵循批量释放的策略,对象积累到一定程度就释放给 CentralCache;CentralCache发现一个 Span的内存完全释放了,就可以把这个 Span 归还给 PageHeap;PageHeap发现一批连续的Page都释放了,就可以归还给操作系统。