我有一个分配大量内存的应用程序,我正在考虑使用一种比malloc更好的内存分配机制。
我的主要选择是:jemalloc和tcmalloc。使用它们中的任何一个有什么好处吗?
http://locklessinc.com/benchmarks.shtml" target="_blank">html中的某些机制(包括作者的专有机制-
无锁)之间有很好的比较, 并提到了每种机制的利弊。
鉴于这两种机制都是活跃的,并且会不断完善。是否有人对这两者的相对表现有任何见识或经验?
如果我没记错的话,主要区别在于多线程项目。
这两个库都尝试通过让线程从不同的缓存中选择内存来取消对内存获取的争用,但是它们有不同的策略:
jemalloc
(由Facebook使用)维护每个线程的缓存tcmalloc
(来自Google)维护着一个缓存池,线程对缓存建立了“自然”的亲和力,但是可能会改变如果我没记错的话,这再次导致了线程管理方面的重要区别。
jemalloc
如果线程是静态的,例如使用池,则速度更快tcmalloc
创建/销毁线程时速度更快还有一个问题是,由于jemalloc
旋转新的缓存以容纳新的线程ID,因此线程的突然尖峰会使您在随后的平静阶段中拥有(大部分)空的缓存。
因此,tcmalloc
在一般情况下,我会建议使用,并保留jemalloc
用于非常特定的用途(在应用程序的生命周期内,线程数量的变化很小)。
问题内容: 我想知道List和Set之间在性能,内存分配和可用性方面的比较。 如果我不需要在对象列表中保持唯一性,也不需要维护插入顺序,是否可以互换使用ArrayList和SortedSet / HashSet?直接使用Collections类而不是列表/集合会好吗? PS我也不需要列表或设置java提供的特定功能。我之所以使用列表/集而不是数组,是因为它们可以动态增长,而无需额外的编程工作。 问
本文向大家介绍JEE与Spring Boot代码性能比较分析,包括了JEE与Spring Boot代码性能比较分析的使用技巧和注意事项,需要的朋友参考一下 JavaEE与Spring Boot其实很难比较测试,前者适合单体SOA架构,后者适合微服务,但是还是有好事者把两者放在一起比较性能。 我把一些JEE和Spring代码放在一起做了同样的事情。Spring做了一些开箱即用的好东西,所以我在一些J
本文向大家介绍C#中Dynamic和Dictionary性能比较,包括了C#中Dynamic和Dictionary性能比较的使用技巧和注意事项,需要的朋友参考一下 开发中需要传递变参,考虑使用 dynamic 还是 Dictionary(准确地说是Dictionary<string,object>)。 dynamic 的编码体验显著优于 Dictionary,如果性能差距不大的话,我会选择使用dy
问题内容: 当您知道on上对象/项目的确切数量时,我非常想知道哪种内存分配方法对性能(例如,运行时间)有利,这对性能有好处。少量对象(少量内存)和大量对象(大量内存)的成本。 与 请告诉我。谢谢。 注意:我们可以对此进行基准测试,并且可能知道答案。但是我想知道解释这两种分配方法之间性能差异的概念。 问题答案: 静态分配将更快。静态分配可以在全局范围和堆栈上进行。 在全局范围内,静态分配的内存内置在
有趣的是,雷迪斯的表现并不是那么好。要么是Python做了一些神奇的事情(存储文件),要么是我的redis版本慢得惊人。 我不知道这是不是因为我的代码的结构方式,或者什么,但我希望redis做得比它做得更好。 为了制作一个redis缓存,我将我的二进制数据(在本例中是一个HTML页面)设置为一个从文件名派生的密钥,过期时间为5分钟。 在所有情况下,文件处理都是用f.read()完成的(这比f.re
更新:为了更明显地说明我正在努力做的事情:我将拥有5000万以上的设备流媒体音频。流平均为100KB,峰值流量时为200K流/分钟。我正在寻找一种存储解决方案来满足这种需求。我一直在研究Bookkeeper、Kafka、Ignite、Cassandra和Redis。到目前为止,我只对redis和ignite进行了基准测试,但我很惊讶ignite这么慢。