jixiaoxing 发表于 2013-1-15 02:41:50

计算Java Serializable对象大小的方法

在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 os = 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));  }  } 

 
 
页: [1]
查看完整版本: 计算Java Serializable对象大小的方法