如果我没记错的话,主要区别在于多线程项目。
这两个库都尝试通过让线程从不同的缓存中选择内存来取消对内存获取的争用,但是它们有不同的策略:
jemalloc
(由Facebook使用)维护每个线程的缓存tcmalloc
(来自Google)维护着一个缓存池,线程对缓存建立了“自然”的亲和力,但是可能会改变
如果我没记错的话,这再次导致了线程管理方面的重要区别。
jemalloc
如果线程是静态的,例如使用池,则速度更快tcmalloc
创建/销毁线程时速度更快
还有一个问题是,由于
jemalloc旋转新的缓存以容纳新的线程ID,因此线程的突然尖峰会使您在随后的平静阶段中拥有(大部分)空的缓存。
因此,
tcmalloc在一般情况下,我会建议使用,并保留
jemalloc用于非常特定的用途(在应用程序的生命周期内,线程数量的变化很小)。



