If I remember correctly, the main difference was with multi-threaded projects.
Both libraries try to de-contention memory acquire by having threads pick the memory from different caches, but they have different strategies:
jemalloc
(used by Facebook) maintains a cache per thread
tcmalloc
(from Google) maintains a pool of caches, and threads develop a "natural" affinity for a cache, but may change
This led, once again if I remember correctly, to an important difference in term of thread management.
jemalloc
is faster if threads are static, for example using pools
tcmalloc
is faster when threads are created/destructed
There is also the problem that since jemalloc
spin new caches to accommodate new thread ids, having a sudden spike of threads will leave you with (mostly) empty caches in the subsequent calm phase.
As a result, I would recommend tcmalloc
in the general case, and reserve jemalloc
for very specific usages (low variation on the number of threads during the lifetime of the application).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…