TCMalloc:线程缓存Malloc

来源:互联网 发布:腾讯代理吃鸡会优化吗 编辑:程序博客网 时间:2024/05/21 23:39
TCMalloc:线程缓存Malloc

一. TCMalloc的内存管理框架

           
       
        由上图可知:TCMalloc通过三级缓存来实现对内存的管理:ThreadCache,CentralCache和PageHeap。ThreadCache和CentralCache通过批量的内存块进行交互,CentralCache和PageHeap通过SPAN进行交互,如此形成了相互联系的整体。

二. TCMalloc简介
        TCMalloc赋予每个线程一个线程局部cache。小的分配可以从线程局部缓存中获得。对象从中央数据结构移到线程局部缓存,周期性的垃圾回收用于将线程局部缓存中的内存迁移到中央数据结构中。
        TCMalloc将大小<32k的对象视为小对象,大于32k的对象视为大对象。大对象直接从central heap中分配,使用页级分配器(内存区域中一个页是4k大小),一个大的对象通常是页对齐并占据一个完整的页数目。
        对于小对象的请求,可以直接从线程局部缓存中获取,如果线程局部缓存中没有空闲内存,则从central heap中一次性获取一连串小对象。TCMalloc对于小内存,按8的整数次倍分配,对于大内存,按4k的整数次倍分配。
        当某个线程缓存当缓存中所有对象的总共大小超过2MB的时候,会对它进行垃圾回收。垃圾回收阈值会自动根据线程数量的增加而减小,这样就不会因为程序有大量线程而过度浪费内存。
        如图所示:


更细节可以参考:http://google-perftools.googlecode.com/svn/trunk/doc/tcmalloc.html
        
原创粉丝点击