ptmalloc 是glibc的内存分配管理

tcmalloc 是google的内存分配管理模块

jemalloc 是BSD的提供的内存分配管理

三者的性能对比参考从网上的一个图如下:

自己测试了一下:

代码如下:

   1: #include <iostream>                                                                                                      

   2: #include <map>

   3:  

   4: using namespace std;

   5: int main(int argc, char**argv) {

   6:   cout << "Hello world" << endl;

   7:   std::map<int,int> int_map;

   8:   for (int i = 0; i < 10000000; ++i) {

   9:     int_map.insert(std::map<int,int>::value_type(i,i));

  10:   }

  11:   return 0;

  12: }

都是执行一个map insert 100W次操作。

为了测试方便,我们生成了3个binary,分别链接使用jemalloc和tcmalloc 和ptmalloc的库做对比:

ldd jemalloc_test

    linux-vdso.so.1 =>  (0x00007fffc6fc3000)

    libjemalloc.so.1 => /usr/local/lib/libjemalloc.so.1 (0x00007f45181aa000)

    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4517ea4000)

    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4517c1e000)

    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4517a08000)

    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4517673000)

    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4517454000)

    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4517250000)

    /lib64/ld-linux-x86-64.so.2 (0x00007f45183f2000)

ldd tcmalloc_test

    linux-vdso.so.1 =>  (0x00007fff94160000)

    libtcmalloc.so.0 => /usr/lib/libtcmalloc.so.0 (0x00007f20107dc000)

    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f20104d6000)

    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2010250000)

    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f201003a000)

    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f200fca5000)

    libunwind.so.7 => /usr/lib/libunwind.so.7 (0x00007f200fa8b000)

    /lib64/ld-linux-x86-64.so.2 (0x00007f2010a68000)

ldd ptmalloc_test

    linux-vdso.so.1 =>  (0x00007fff08501000)

    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7e6c156000)

    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e6bed1000)

    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7e6bcba000)

    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e6b925000)

    /lib64/ld-linux-x86-64.so.2 (0x00007f7e6c483000)

然后分别执行各程序,使用time统计时间如下:

time./jemalloc_test

Hello world

real    0m9.927s

user    0m9.650s

sys    0m0.250s

time ./tcmalloc_test

Hello world

real    0m9.836s

user    0m9.410s

sys    0m0.410s

time ./ptmalloc_test

Hello world

real    0m11.890s

user    0m11.520s

sys    0m0.360s

 

jemalloc和tcmalloc的性能不分伯仲,而ptmalloc则要低一些。

这里简单介绍下性能。后面抽时间再介绍下各自的实现原理。

refer: http://blog.csdn.net/yfkiss/article/details/7035579

tcmalloc jemalloc 和ptmalloc 对比的更多相关文章

  1. tcmalloc jemalloc glibc内存分配管理模块性能测试对比

    tcmalloc是谷歌提供的内存分配管理模块 jemalloc是FreeBSD提供的内存分配管理模块 glibc是Linux提供的内存分配管理模块 并发16个线程,分配压测3次,每次压15分钟,可以看 ...

  2. ptmalloc tcmalloc jemalloc 总结的总结 及覆盖原理

    windows下还有 detours库可以hook

  3. 【GoLang】tcmalloc && jemalloc

    https://www.douban.com/note/512625720/ http://blog.csdn.net/hanxin1987216/article/details/8156010 ht ...

  4. 内存优化总结:ptmalloc、tcmalloc和jemalloc(转)

    转载于:http://www.cnhalo.net/2016/06/13/memory-optimize/ 概述 需求 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越 ...

  5. ptmalloc、tcmalloc和jemalloc

    内存优化总结:ptmalloc.tcmalloc和jemalloc 转载 2017年09月05日 18:57:12 3674 转载于:http://www.cnhalo.net/2016/06/13/ ...

  6. 内存优化总结:ptmalloc、tcmalloc和jemalloc

    概述 需求 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越重要,选择合适的内存管理算法会带来明显的性能提升.比如nginx, 它在每个连接accept后会malloc ...

  7. 【原创】MySQL5.7.18(ptmalloc VS tcmalloc VS jemalloc)性能测试

    ptmalloc(glibc的malloc)是Linux提供的内存分配管理模块,目前我们MySQL默认使用的内存分配模块. tcmalloc是Google提供的内存分配管理模块. jemalloc是F ...

  8. Kioskcached(2) 之 使用tcmalloc 替换 ptmalloc

    前言 我在 Kioskcached(1)之 Memcached & Redis & Kioskcached 性能测试对比 中找到的一个问题是 malloc,对于一个内存型数据库,很容易 ...

  9. Linux就这个范儿 第14章 身在江湖

    Linux就这个范儿 第14章 身在江湖 “有人的地方就有江湖”,如今的计算机世界就像一个“江湖”.且不说冠希哥有多么无奈,把微博当QQ的局长有多么失败,就说如此平凡的你我什么时候就成了任人摆布的羔羊 ...

随机推荐

  1. TypeScript和JavaScript的区别

    JavaScript和TypeScript的对比 注:参考https://juejin.im/entry/5a52ed336fb9a01cbd586f9f做的笔记 概要介绍 JavaScript Ja ...

  2. linux6.5 网卡绑定

    Linux网口绑定 通过网口绑定(bond)技术,可以很容易实现网口冗余,负载均衡,从而达到高可用高可靠的目的.前提约定: 2个物理网口分别是:eth0,eth1 绑定后的虚拟口是:bond0 服务器 ...

  3. 【转载】sublime text3 全攻略

    给个链接:http://www.w3cfuns.com/blog-5466732-5405668.html 等作者更新完后自己再整理

  4. Java的HashMap和Hashtable有什么区别HashSet和HashMap有什么区别?使用这些结构保存的数需要重载的方法是哪些?

    HashMap与Hashtable实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用 两者的主要区别如下 1.Hashtable是早期JDK提供的接口,HashMap是新版J ...

  5. spark window本地运行wordcount错误

    在运行本地运行spark或者hadoop代码时可能会遇到一下三种问题   1.Exception in thread "main" java.lang.UnsatisfiedLin ...

  6. Java 基础 - 如何理解String不可变

    ref: https://www.zhihu.com/question/20618891 第一个答案. 扩展“ Java 基础 - System.arraycopy() 浅拷贝 深拷贝

  7. Java——main()方法

    3.1 main()方法 由于java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public,又因为java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static ...

  8. (转载)js引擎的执行过程(二)

    概述 js引擎执行过程主要分为三个阶段,分别是语法分析,预编译和执行阶段,上篇文章我们介绍了语法分析和预编译阶段,那么我们先做个简单概括,如下: 语法分析: 分别对加载完成的代码块进行语法检验,语法正 ...

  9. 随机生成一串字符串(java)

    该随笔为开发笔记 今天在公司接手了一个项目,在看该项目老代码时,发现上一位大佬写的随机取一串字符串还不错,在此做一次开发笔记 在他的基础上我做了点改动,但是原理一样 /** * 随机取一段字符串方法1 ...

  10. Likecloud-吃、吃、吃

    题目背景 问世间,青春期为何物? 答曰:"甲亢,甲亢,再甲亢:挨饿,挨饿,再挨饿!" 题目描述 正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一直处在饥饿的状态中.某日 ...