書接 ,接著說,其實呀,這個磁碟快取,無非就是將存放到記憶體中的東東,存放到磁碟上去,
然後在記憶體中給個對應的對映關係,標明有哪些快取物件。
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書訊 欄目 書評 副標 內文 如果完滿的人生是我們要建構的系統,則李開復博士的這本書嘗試提供分析與設計。在書中,作者提供了如何讓自己更好的方 旁徵博引地闡述中心思想的實質意義。他畫出了以價值觀為中心,自省 胸懷 同理心 自信 勇氣 積極位於內圈,是人生態度。有效執行 合作溝通 人際交流 發...