首页 / 操作系统 / Linux / 计算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)); } }