彩票走势图

计算Java Serializable对象大小的方法

转帖|其它|编辑:郝浩|2010-07-14 13:45:08.000|阅读 624 次

概述:在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@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP