设为首页 加入收藏

TOP

计算JavaSerializable对象大小的方法
2014-11-23 21:27:02 】 浏览:232
Tags:计算 JavaSerializable 对象 大小 方法

  在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));


  }


  }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇JAVA中Session的会话状态 下一篇Java操作Excel、PDF文件(1)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目