Redis三种内存分配方式分别是:jemalloc、tcmalloc和libc malloc。下面分别介绍一下这三种内存分配方式。
jemalloc(默认)
jemalloc是一种高效的内存分配器,它是由FreeBSD系统的开发者Jason Evans开发的。Redis使用jemalloc来进行内存分配,因为它具有很好的性能和可扩展性,以及对多线程环境的支持。jemalloc采用了一些高级内存管理技术,例如基于线程的内存分配器、内存池和高效的内存碎片整理等,可以在高并发的场景下有效地提高内存分配的效率和性能。
tcmalloc
tcmalloc是由Google公司开发的内存分配器,它也是一种高效的内存分配器,可以在高并发的场景下提高内存分配的效率和性能。与jemalloc不同的是,tcmalloc采用了一些基于线程缓存的技术,将内存分配和释放的开销降到最低,同时也支持多线程环境下的内存分配和管理。
libc malloc
libc malloc是Linux系统自带的内存分配器,它是一种比较常见的内存分配器,但在高并发的场景下,效率和性能可能会有所下降。因此,Redis在默认情况下并不使用libc malloc作为内存分配器,除非用户在编译Redis时强制指定使用libc malloc。
综上所述,Redis使用jemalloc和tcmalloc作为内存分配器可以在高并发场景下提高程序的性能和效率,而在一些特殊场景下,也可以使用libc malloc作为内存分配器,但需要注意其性能和效率可能会有所下降。
jemalloc特点
官方地址:http://jemalloc.net/
jemalloc是一种广泛应用于各种开源项目的内存分配器,它是由FreeBSD系统的开发者Jason Evans开发的。jemalloc具有高效、可扩展、安全等特点,可以在高并发的场景下提高内存分配的效率和性能。下面对jemalloc的特点和原理进行详细介绍。
高效的内存分配和管理
jemalloc采用了一些高级内存管理技术,例如基于线程的内存分配器、内存池和高效的内存碎片整理等,可以在高并发的场景下有效地提高内存分配的效率和性能。jemalloc通过将内存池分配给不同的线程,避免了内存分配和释放时的锁竞争,从而提高了程序的并发性能。
可扩展的内存分配器
jemalloc采用了基于分级的内存分配器,可以根据不同的内存大小分配不同的内存块,从而提高了内存的利用率和效率。此外,jemalloc还支持多线程的内存分配和管理,可以根据系统的CPU核心数动态调整内存池的大小,从而更好地适应不同的工作负载。
安全的内存分配器
jemalloc采用了一些安全措施,例如空间隔离、内存检查、防止溢出和重叠等,可以有效地避免内存泄漏和内存错误,从而提高了程序的稳定性和安全性。
针对Linux等系统进行优化
jemalloc针对不同的操作系统进行了优化,例如在Linux系统中,jemalloc采用了一些系统调用和内核特性,可以更好地利用系统资源,提高程序的性能和效率。
综上所述,jemalloc是一种高效、可扩展、安全的内存分配器,可以在高并发的场景下提高程序的性能和效率。在Redis等开源项目中广泛应用,并取得了良好的效果。