Cache 之自我實現磁碟快取

2021-07-02 20:47:15 字數 3342 閱讀 2614

書接 ,接著說,其實呀,這個磁碟快取,無非就是將存放到記憶體中的東東,存放到磁碟上去,

然後在記憶體中給個對應的對映關係,標明有哪些快取物件。

1. cache 地方是確定的,大小是需要管理的,移除機制需要設定的 ?

2. 如何計算放入的object 的大小,這個是個非常關鍵的地方,要是不知道放入的object的大小,那還怎麼玩呀、是不是?

3. cache 的管理:cache的移除,cache 的放入,cache的獲取.

4.如何寫入寫出,這個要比寫記憶體複雜多了,因為有些型別是比較難搞的,所以這個也是重點。

記憶體計算大小,除過   中的sizeof ,還有如下工具類供使用

可以驗證下,還是有些區別的。

public class objbytessizeutil

static final hashtable psizes;

static

private static final class root

private static void sizeof(object obj, identityhashmap known, hashtable types) else }}

} else

class fc = f.gettype();

integer l = (integer) psizes.get(fc);

if (l != null)

size += 4;

object child;

f.setaccessible(true);

try

stack.push(oc); 

stack.push(child);

} catch (illegalacces***ception e)

}c = c.getsuperclass();}}

map parents = (map) types.get(oc);

if (parents == null)

pair p = (pair) parents.get(parentclass);

if (p == null)

p.count += 1;

p.size += size;}}

public static hashtable sizeof(object o)

public static long printtypes(hashtable types)

}return size;

}public static class pair

public static void main(string args) ; //

string str = "我是中國人,我愛我的祖國!"; 

system.out.println(printtypes(sizeof(object)));

system.out.println(printtypes(sizeof(tag)));

system.out.println(printtypes(sizeof(numtest)));

system.out.println(printtypes(sizeof(doubletest)));

system.out.println(printtypes(sizeof(strs)));

system.out.println(printtypes(sizeof(str)));}}

使用時候,如下會介紹:

public class diskcache }}

return instance;

}private diskcache()

cache_path = getproperty("cache.path.disk", cache_path);

file file = new file(cache_path);

if (!file.exists())

remove_strategy = getproperty("cache.remove.tag", remove_strategy);

}public object get(string key) else

return wobject;

} else

} catch (exception e)

}public boolean put(string key, object object) else else if (usedmap.size()>0 || remove_strategy.equalsignorecase("lfu"))

}return result;

}private static void writefile(string key , object object,boolean result)catch (ioexception e)

}private static string getlesskey()else

}index ++;

}return result_key;

}private string getproperty(string key, string defaultvalue)

props = new properties();

props.load(stream);

} catch (exception e) }}

}return props.getproperty(key, defaultvalue);}}

public inte***ce writeableobject extends serializable

public class people implements writeableobject

public people(string name, listlist)

@override

public void read(inputstream inputstream) throws ioexception

}@override

public boolean write(outputstream outputstream) throws ioexception

dos.flush();

dos.close();

return true;

}public string getname()

public void setname(string name)

public listgetlist()

public void setlist(listlist)

}這段**就是使用的事例了:

diskcache cache = diskcache.getinstance();

for (int i = 0; i < 10; i++)

其實這個在前面早就有所描述。不再複述了。。。

自我實現那些事

加泰隆尼亞球評家卡拉索指出過 小羅是性格影響狀態的典型,被長期排除在首發陣容外,他情緒就容易波動,狀態便難以維持,算不得球隊能安心倚重的核心,隊魂。性格上的缺陷,是他被梅西淘汰的根源.這裡有兩個插曲 前後聯絡頓時產生了一種豁然開朗,醍醐灌頂的感覺。以下部分來自閱微堂 adler的 自卑和超越 如果乙...

strcpy的自我實現

strcpy函式的基本內容 原型宣告 extern char strcpy char dest,const char src 標頭檔案 include 和 include 說明 src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。返回指向dest的指標。既然知道了函...

從誠懇出發,邁向自我實現

單元 it書訊 欄目 書評 副標 內文 如果完滿的人生是我們要建構的系統,則李開復博士的這本書嘗試提供分析與設計。在書中,作者提供了如何讓自己更好的方 旁徵博引地闡述中心思想的實質意義。他畫出了以價值觀為中心,自省 胸懷 同理心 自信 勇氣 積極位於內圈,是人生態度。有效執行 合作溝通 人際交流 發...