【Redis】对象的内存回收处理机制之一--引用计数算法

Redis使用引用计数算法进行内存回收,对象创建时计数为1,被使用时增加,不再使用时减少。当计数为0时释放内存。优点在于能穿插回收避免FULLGC暂停,缺点是消耗内存且无法处理循环引用问题。早期Redis仅使用此机制,后续引入了LRU算法。
摘要由CSDN通过智能技术生成

Redis:引用计数算法

由于Redis是使用ANSI C语言编写的,C语言本身并没有具备自动的内存回收机制,因此Redis自己做了一套针对对象的内存回收系统----通过使用 引用计数(reference counting) 来使程序在正确的时机自动释放对象并进行内存回收。

	在redisObject中拥有一条名为“refcount”的属性,其作用便是用来记录对象的使用情况:
typedef struct redisObject {
   
//...
//引用计数
int refcount;
//...
}robj;

引用计数在程序中发生的变化

在程序使用对象的时候,该属性是如何变化的呢?
在《redis设计与实现》一书中为我们讲述了该属性的变化机制:
·在创建一个新对象时,引用计数的值会被初始化为1;
·当对象被一个新程序使用时,它的引用计数值会被增一;
·当对象不再被一个程序使用时,它的引用计数值会被减一;
·当对象的引用计数值变为0时,对象所占用的内存会被释放。

对于redis而言,对象的生命周期可以划分为:创建对象,操作对象,释放对象 三个阶段:

在创建对象时,将计数器默认初始化为1:
robj *createObject(int type, void *ptr) {
   
    robj *o = zmalloc(sizeof(*o));
    o->type = type;
    o->encoding 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值