實現的功能:
1. 將物件按唯一的標識id存入快取池(池內部用hashmap 實現);
2. 通過唯一標示id高速讀取池中的物件,如果物件已經失效,返回空;
3. 自動計算物件的訪問時間,使用頻率,使用次數,快取命中次數和訪問次數;
4. 對於使用頻率低,使用次數少,空閒時間長的物件,自動從快取池中刪除;
5. 引數可配置,監視器自己實現,不依賴其他包,功能簡單;
把原始碼包發上來,拋磚引玉哈,希望大家多多批評!
下面的**是初始化和使用方法!
objectcachepooldatacache = new objectcachepool(
cacheconfig.getintproperty("cache", "maxsize"),
cacheconfig.getintproperty("cache", "minsize")
);//是否自動清理
datacache.setautoclean(commonutils.parseboolean(cacheconfig.getgameproperty("cache", "isautoclean"),true));
//狀態報告間隔
datacache.setstatetimes(cacheconfig.getintproperty("cache", "statetimes"));
//清理工作臨界值
datacache.setcriticalsize(cacheconfig.getintproperty("cache", "criticalsize"));
//最大清除數量
datacache.setmaxcleansize(cacheconfig.getintproperty("cache", "maxcleansize"));
//最大允許空閒時間 大於此值,將被列入清除範圍
datacache.setmaxfreetime(cacheconfig.getintproperty("cache", "maxfreetime"));
//最小允許訪問率 小於此值,將被列入清除範圍
datacache.setminaccfrq(cacheconfig.getdoubleproperty("cache", "minaccfrq"));
//最小允許訪問次數 小於此值,將被列入清除範圍
datacache.setminaccnum(cacheconfig.getintproperty("cache", "minaccnum"));
//設定快取監視器
datacache.setmonitor(new cachemonitor());
datacache.startmonitor();
一些引數的意義如下:
statetimes 狀態資訊輸出間隔時間
isautoclean 是否自動清理
maxsize 最大允許容量
minsize 最小容量
criticalsize 清理臨界點,快取達到此值後清理工作開始執行
maxcleansize 每次清理數量 每次清理工作從快取中清除出局的數量達到此值後清理工作停止
maxfreetime 最大空閒時間,大於此空閒時間的物件將被列入被清理的範圍 秒
minaccfrq 物件的最小訪問平率,小於此值的物件將被列入被清理的範圍 次/小時
minaccnum 物件允許的最小訪問次數,小於此值的物件將被列入被清理範圍 次
乙個簡單的物件池
在伺服器的的執行過程中,由於大量的計算會導致某些物件頻繁地分配和釋放,久而久之就會產生大量的記憶體碎片,從而影響伺服器的效率和穩定。本文通過實現乙個輕量級的物件池重用物件來解決這個問題。include include mutex.h define min increasize 30 每次最少分配30...
乙個簡單的物件池
從書上直接摘抄下來的物件池,以後別給忘了 template class objectpool template objectpool objectpool int chunksize throw std invalid argument,std bad alloc mchunksize chunks...
乙個簡單的Matrix實現
我們直接來看 吧 matrix.h pragma once include using namespace std 矩陣類 class matrix 下面是實現和測試的 matrix.cpp include matrix.h include include matrix matrix void ma...