轉帖|其它|編輯:郝浩|2010-07-14 13:45:08.000|閱讀 642 次
概述:在Cahce的設計中,一般會考慮兩種對象管理方法,一是按對象大小,比如開一個10M字節的cahce空間。另外一個是按對象的數量,比如1000個對象的cache空間。本文將講述計算Java Serializable對象大小的方法。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在Cahce的設計中,一般會考慮兩種對象管理方法,一是按對象大小,比如開一個10M字節的cahce空間。另外一個是按對象的數量,比如1000個對象的cache空間。
對于按對象尺寸管理的cache,由于Java對象的實際內存大小不好獲得(我是不知道如何計算的),所以一般就使用一個Serializable對象的序列化尺寸來代替,序列化時通常把一個對象序列化到一個字節buffer里,那么就可以獲得這個buffer的字節數。今天,在工作中,突軟想到這樣做太浪費空間,看了Java的ObjectOutputStream這個類的源碼,發現也可以如下做,只計數,不產生字節轉移,那么就不會耗費內存空間了。
public final class SizeCalculator {
public static int calcSize(java.io.Serializable o) {
int ret = 0;
class DumbOutputStream extends OutputStream {
int count = 0;
public void write(int b) throws IOException {
count++; // 只計數,不產生字節轉移
}
}
DumbOutputStream buf = new DumbOutputStream();
ObjectOutputStream s = null;
try {
os = new ObjectOutputStream(buf);
os.writeObject(o);
ret = buf.count;
} catch (IOException e) {
// No need handle this exception
e.printStackTrace();
ret = -1;
} finally {
try {
os.close();
} catch (Exception e) {
}
}
return ret;
}
public static void main(String[] args){
System.err.println(calcSize(1));
}
}
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載