内存优化

选择合适的内存管理算法会带来明显的性能提升

内存管理自底向上分为

1.操作系统内核的内存管理
2.glibc层使用系统调用维护的内存管理算法
3.应用程序从glibc动态分配内存后,根据应用程序本身的程序特性进行优化

优秀的通用内存分配器应具有的特性

额外的空间损耗尽量少
分配速度尽可能快
尽量避免内存碎片
缓存本地化友好
通用性,兼容性,可移植性,易调试

服务端程序使用glibc提供的malloc/free系列函数,而glibc使用的ptmalloc2

Ptmalloc

  Ptmalloc采用主-从分配区的模式,当一个线程需要分配资源的时候,从链表中找到一个没加锁的分配区,在进行内存分配

  线程数越多,Ptmalloc 出现锁竞争的概率就越高

内存分配还有TCMalloc 和JEMalloc

TCMalloc 是Google开源的一个内存管理库

  TCMalloc为每个线程分配了一个线程本地ThreadCache

  小对象(<=32K)从ThreadCache分配,大对象从CentralCache分配

  ThreadCache不够用的时候,会从CentralCache中获取空间放到ThreadCache中

  TCMalloc比较适合在多线程环境下分配 256KB 以下的内存

JEMalloc

  JEMalloc是facebook推出的

  与tcmalloc类似,每个线程同样在<32KB的时候无锁使用线程本地cache

Jemalloc和tcmalloc类似的线程本地缓存,避免锁的竞争

在多线程环境使用tcmalloc和jemalloc效果非常明显,Ptmalloc 更擅长大内存的分配

当线程数量固定,不会频繁创建退出的时候, 可以使用jemalloc;反之使用tcmalloc可能是更好的选择

 

 

posted @ 2020-05-29 14:16  慕尘  阅读(182)  评论(0编辑  收藏  举报