firefox - jemalloc 是如何工作的?有什么好处?

标签 firefox malloc

Firefox 3 附带了一个新的分配器:jemalloc

我在几个地方听说这个新的分配器更好。不过,Google 的顶级结果并未提供任何进一步的信息,我对它到底是如何工作的很感兴趣。

最佳答案

jemalloc 最初出现在 FreeBSD 中,是“Jason Evans”的创意,因此称为“je”。如果我没有写过一个名为 paxos 的操作系统,我会 mock 他太自负了:-)

参见this PDF了解完整详情。这是一份详细描述算法如何工作的白皮书。

主要好处是多处理器和多线程系统的可扩展性,部分是通过使用多个竞技场(进行分配的原始内存块)来实现的。

在单线程情况下,多个 arena 没有真正的好处,因此使用单个 arena。

但是,在多线程情况下,会创建许多竞技场(竞技场数量是处理器数量的四倍),并且线程会以循环方式分配给这些竞技场。

这意味着可以减少锁争用,因为虽然多个线程可能同时调用 mallocfree,但它们只有在共享同一区域时才会发生争用。两个不同 arena 的线程不会互相影响。

此外,jemalloc 尝试优化缓存局部性,因为从 RAM 获取数据的行为比使用 CPU 缓存中已有的数据慢得多(在概念上与快速获取之间的差异没有什么不同)从 RAM 获取与从磁盘缓慢获取)。为此,它首先尝试最大限度地减少总体内存使用量,因为这更有可能确保应用程序的整个工作集都在缓存中。

并且,如果无法实现这一点,它会尝试确保分配是连续的,因为一起分配的内存往往会一起使用。

从白皮书来看,这些策略似乎为单线程使用提供了与当前最佳算法相似的性能,同时为多线程使用提供了改进。

关于firefox - jemalloc 是如何工作的?有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1624726/

相关文章:

javascript - Firefox 中的网络音频

firefox - 如何使用 selenium java 从 TFS 将 xpi 扩展添加到 Firefox 浏览器

c - 在 Struct 中动态分配二维数组(在 C 中)

通过与小于它的素数的整除来检查一个数是否为素数,如果在 C 中证明是素数,则将其存储在数组中

javascript - 每当我更改其值时如何阻止文本区域滚动到顶部

javascript - MDN 上的测试 JavaScript 示例

javascript - Firefox 和 Internet Explorer 中的全窗口 onClick 处理程序

c - 如何从具有 void 指针的函数中获取字符串?

c - 了解 glibc malloc binning 实现

具有指针字段的结构的连续内存分配