Q8:
我们都知道Redis使用的是C语言来编写的,但是C语言并不支持垃圾回收机制,你能讲一下Redis的内存回收机制是怎样实现的吗?
A:
因为Redis中存取数据的都是对象,所以开发者在RedisObject里预留了一个字段叫refcount,类似于Java的引用计数法判断垃圾。在创建对象时,将其初始化为1,当遇到被程序使用时,会新增1,不被使用时会减小1,而当减小为0时,则进行回收,其生命周期相较于Java的垃圾回收机制简单不少,主要分为“创建对象”、“操作对象”、“释放对象”。另外,鉴于Redis的内存比较宝贵,因此还引入了另外一种机制(共享内存),类似于JVM中的StringPool,用于节省内存,防止创建**过多的相同数值的字符串**。