jemalloc如何工作? 有什么好处?
Firefox 3带有一个新的分配器: jemalloc
。
我在几个地方听说这个新的分配器更好。 Google的最佳search结果并没有提供任何进一步的信息,我对它的工作原理感兴趣。
jemalloc
首先出现在FreeBSD上,这是一个“杰森·埃文斯”的心血结晶,因此也就是“je”。 我会嘲笑他是自负的,如果我没有写过一个名为paxos
的操作系统:-)
完整的细节请参阅此PDF 。 这是一个白皮书,详细描述algorithm是如何工作的。
主要的好处是在多处理器和multithreading系统中实现了可扩展性,部分原因是通过使用多个场(从中分配的原始内存块)。
在单线程的情况下,对于多个赛场来说没有真正的好处,所以使用单个赛场。
然而,在multithreading情况下,创build了许多舞台(处理器数量是竞技场的四倍),线程以循环方式分配给这些舞台。
这意味着可以减lesslocking争用,因为在multithreading可能同时调用malloc
或free
,它们只会在共享同一个竞技场的情况下进行竞争。 两个不同领域的线程不会相互影响。
另外, jemalloc
试图优化caching局部性,因为从RAM中获取数据的行为比使用CPUcaching中的数据慢得多(概念上与从RAM快速获取和从磁盘慢速获取之间的区别没有什么不同)。 为此,它首先尝试最小化内存使用,因为这更有可能确保应用程序的整个工作集在caching中。
而且,在无法实现的地方,它试图确保分配是连续的,因为分配在一起的内存往往被一起使用。
从白皮书来看,这些策略似乎给当前单线程使用的最佳algorithm提供了类似的性能,同时为multithreading使用提供了改进。
有一个中间源:C源本身: http : //mxr.mozilla.org/mozilla-central/source/memory/mozjemalloc/jemalloc.c
在开始时,一个简短的总结描述了它是如何工作的。 但是,更深入的algorithm分析是不存在的。
至于什么好处jemalloc带到Mozilla,每个http://blog.pavlov.net/2008/03/11/firefox-3-memory-usage/ (也是第一个谷歌结果mozilla + jemalloc):
jemalloc在长时间运行后给了我们最less量的碎片 。 […]我们在Windows Vista上的自动化testing显示,当我们打开jemalloc时,内存使用量下降了22% 。
2013年,Aerospike在一家私人部门实施了jemalloc。2014年,它被纳入Aerospike 3.3。 Psi Mankoski刚刚写了关于Aerospike的实现,以及何时以及如何有效使用jemalloc的高可扩展性 。
jemalloc确实帮助Aerospike利用现代multithreading,多CPU,多核计算机架构。 jemalloc还内置了一些非常重要的debuggingfunction来pipe理舞台。 debugging允许Psi能够告诉,例如,什么是真正的内存泄漏,而内存碎片的结果是什么。 Psi还讨论了线程caching和每线程分配如何提供整体性能(速度)改进。
- 我可以调用jquery click()来跟踪一个<a>链接,如果我没有绑定一个事件处理程序绑定或点击它已经?
- Firefox 4需要的inputforms红色边框/轮廓
- 如何在Firefox扩展中使用jQuery
- jQuery UIsorting滚动帮助器元素抵消Firefox的问题
- jQuery的event.preventDefault()不工作在Firefox(包括JSFiddle)
- X-Frame-Options:允许从Firefox和铬
- Firefox和Chrome在本地主机上运行缓慢; 已知的修复程序在Windows 7上不起作用
- 关于HTML 5中的地理定位
- FireFox是如何工作的? 源代码遍历?