国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Redis 內(nèi)存回收

2018-08-02 14:49 更新

因為 C 語言并不具備自動的內(nèi)存回收功能, 所以 Redis 在自己的對象系統(tǒng)中構建了一個引用計數(shù)(reference counting)技術實現(xiàn)的內(nèi)存回收機制, 通過這一機制, 程序可以通過跟蹤對象的引用計數(shù)信息, 在適當?shù)臅r候自動釋放對象并進行內(nèi)存回收。

每個對象的引用計數(shù)信息由 redisObject 結(jié)構的 refcount 屬性記錄:

typedef struct redisObject {

    // ...

    // 引用計數(shù)
    int refcount;

    // ...

} robj;

對象的引用計數(shù)信息會隨著對象的使用狀態(tài)而不斷變化:

  • 在創(chuàng)建一個新對象時, 引用計數(shù)的值會被初始化為 1 ;
  • 當對象被一個新程序使用時, 它的引用計數(shù)值會被增一;
  • 當對象不再被一個程序使用時, 它的引用計數(shù)值會被減一;
  • 當對象的引用計數(shù)值變?yōu)?nbsp;0 時, 對象所占用的內(nèi)存會被釋放。

表 8-12 列出了修改對象引用計數(shù)的 API , 這些 API 分別用于增加、減少、重置對象的引用計數(shù)。


表 8-12 修改對象引用計數(shù)的 API

函數(shù) 作用
incrRefCount 將對象的引用計數(shù)值增一。
decrRefCount 將對象的引用計數(shù)值減一, 當對象的引用計數(shù)值等于 0 時, 釋放對象。
resetRefCount 將對象的引用計數(shù)值設置為 0 , 但并不釋放對象, 這個函數(shù)通常在需要重新設置對象的引用計數(shù)值時使用。

對象的整個生命周期可以劃分為創(chuàng)建對象、操作對象、釋放對象三個階段。

作為例子, 以下代碼展示了一個字符串對象從創(chuàng)建到釋放的整個過程:

// 創(chuàng)建一個字符串對象 s ,對象的引用計數(shù)為 1
robj *s = createStringObject(...)

// 對象 s 執(zhí)行各種操作 ...

// 將對象 s 的引用計數(shù)減一,使得對象的引用計數(shù)變?yōu)?0
// 導致對象 s 被釋放
decrRefCount(s)

其他不同類型的對象也會經(jīng)歷類似的過程。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號