实际上,这是一个编译时选项。默认会使用内部的 slab 分配器。您确实确实应该 使用内建的 slab 分配器。最早的时候,memcached 只使用 malloc/free 来管理 内存。然而,这种方式不能与 OS 的内存管理以前很好地工作。反复地 malloc/free 造成了内存碎片,OS 最终 ...
分类:
系统相关 时间:
2020-06-18 11:02:57
阅读次数:
55
1. Reids内存的划分 数据 内存统计在used_memory中 进程本身运行需要内存 Redis主进程本身运行需要的内存占用,代码、常量池等 缓冲内存,客户端缓冲区、复制积压缓冲区、AOF缓冲区。有jemalloc分配内存,会统计在used_memory中 内存碎片 Redis在分配、回收物理 ...
分类:
其他好文 时间:
2020-06-12 14:49:11
阅读次数:
61
是什么 内存分配管理器,主要为skiplist即Memtable服务而不是整个项目。申请内存时,将申请到的内存直接放入vector中,在Arena的生命周期结束后,统一释放掉所有申请的内存,内部结构如下图: 为什么要用 避免内存碎片,skiplist里面记录的都是用户传进来的key/value,这些 ...
分类:
数据库 时间:
2020-06-09 09:51:40
阅读次数:
65
GC 几个算法 标记 - 清理 会产生内存碎片 标记 - 整理 : 清除一个地方的内容,后面的内容自动补上 缺点: 代价太大了 复制算法: 将整个内存一分为二,分别记为1区2区。 当一个区快满的时候,把还没有被标记的内容复制到另外一个区,被标记的代表要删除的,就不用复制了。然后把当前区的内容全部清除 ...
分类:
其他好文 时间:
2020-05-31 20:11:39
阅读次数:
91
1. Redis 和 memcache 的区别 1. memcache 多线程 ,redis 单线程 2. redis 支持5种数据类型,memcache只支持一种字符串类型 3. 内存管理 redis : redis使用malloc和free来进行内存分配,会导致内存碎片,加重操作系统内存管理器的 ...
分类:
系统相关 时间:
2020-05-22 17:07:41
阅读次数:
63
对于redis来说,什么是最重要的? 毋庸置疑,是内存。 一、reids 内存分析 redis内存使用情况:info memory 示例: 可以看到,当前节点内存碎片率为226893824/209522728≈1.08,使用的内存分配器是jemalloc。 used_memory_rss 通常情况下 ...
分类:
其他好文 时间:
2020-05-16 12:23:18
阅读次数:
84
1:复制算法 将内存平均分为两份:A和B。当A部分内存使用完了,将A部分内存中还在使用的对象copy到B部分内存中,然后清空A部分内存。以此类推... 这种算法缺点是内存利用率只用50%;2:标记-清除算法 先标记所有要回收的对象,然后在清除所有标记好的对象;这种算法的缺点是会有大量的不连续内存碎片... ...
分类:
编程语言 时间:
2020-05-14 15:07:30
阅读次数:
56
垃圾回收算法: 标记-清除法:当发现需要回收的内容时,标记并直接清除。 缺点:需要遍历全堆,复杂度高,并且会带来内存碎片等问题 标记-整理法:将不需要回收的内容标记并整理到一起,然后清除剩下的部分 优缺点:没有内存碎片问题;但是如果存活的多,会产生多次搬运,降低效率。 复制法:将内存分两块,每次将存 ...
分类:
其他好文 时间:
2020-05-14 11:05:38
阅读次数:
63
今天看数据库,书中提到:由于索引是采用 B 树结构存储的,所以对应的索引项并不会被删除,经过一段时间的增删改操作后,数据库中就会出现大量的存储碎片,这和磁盘碎片、内存碎片产生原理是类似的,这些存储碎片不仅占用了存储空间,而且降低了数据库运行的速度。如果发现索引中存在过多的存储碎片的话就要进行“碎片整 ...
分类:
其他好文 时间:
2020-05-11 23:34:39
阅读次数:
89
FastMM是Embarcadero Delphi的内存管理器的替代品,可在多线程和CPU内核之间很好地扩展,不易出现内存碎片,并且无需使用外部.DLL文件即可支持内存共享。版本5是完全重写了FastMM,从头开始设计,目的是同时保持其优势并解决4.992版的bug。这一版本极大的改进对跨多CPU内 ...
分类:
其他好文 时间:
2020-05-01 14:43:49
阅读次数:
129