在不斷malloc和free操作,會形成很小的記憶體的片段,我們無法繼續利用。
slab allocator機制
將記憶體劃分為數個slab class倉庫
各個倉庫切分成不同尺寸的小塊(chunk)
需要存放內容的時候,需要先判斷內容的大小,為期選擇合理的倉庫存放
memcache儲存著slab class在空閒時chunk列表,存放時根據列表進行分配
(最優策略 )
無法徹底解決記憶體浪費的問題,只能緩解。
增長因子:chunk塊的大小比例。
惰性刪除(好處:減少cpu占用和檢測成本)
過期不會立馬刪除,只是讓使用者看不見這個資料
當某個新值去占用他的位置時,當成chunk來使用
當get key的時候,先判斷key是否過期,如果過期返回空並刪除
lru刪除機制
lru原理:當某個單位被請求的時候,維護乙個計數器,通過計數器判斷誰最少使用
key:250位元組
value:1m,能儲存一般文字
memcache 記憶體管理
page為記憶體分配的最小單位 memcached 的記憶體分配以page為單位,預設情況下乙個page是1m slabs劃分資料空間 memcached 並不是將所有大小的資料都放在一起的,而是預先將資料空間劃分為一系列slabs,每個slab只負責一定範圍內的資料儲存。每個slab負責的空間其實...
memcache的記憶體管理機制
memcache使用了slab allocator的記憶體分配機制 按照預先規定的大小,將分配的記憶體分割成特定長度的塊,以 完全解決記憶體碎片問題 memcache的儲存涉及到slab,page,chunk三個概念 1 chunk為固定大小的記憶體空間,預設為96byte。2 page對應實際的物...
memcache中記憶體管理原始碼剖析
memcahce採用了記憶體頁面,記憶體頁面上的記憶體塊技術實現了記憶體管理器,對item的指標採用了hashtable的方法,通過item的key值實現快速定位查詢item指標的方法,這裡詳細剖析一下實現的關鍵 首先是記憶體管理,在slabs.c 中實現.1 void slabs init voi...