JAVA中求解对象所占字节大小

转载 2015年07月10日 20:59:08

该类为cache4j缓存框架中的工具类方法,该方法实现了两个接口

接口1:计算对象在内存中所占字节数

接口2:复制对象,实现深度克隆效果,实现原理为先序列化对象,然后在反序列化对象;返回一个新的对象,达到克隆效果

 

package net.sf.cache4j.impl;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
/**
 * 
 * @version $Revision: 1.0 $ $Date:$
 * @author Yuriy Stepovoy. <ahref="mailto:stepovoy@gmail.com">stepovoy@gmail.com</a>
 **/
public class Utils {
    /**
     * 计算一个对象所占字节数
     * @param o对象,该对象必须继承Serializable接口即可序列化
     * @return
     * @throws IOException
     */
 public static int size(final Object o) throws IOException {
  if (o == null) {
   return 0;
  }
  ByteArrayOutputStream buf = new ByteArrayOutputStream(4096);
  ObjectOutputStream out = new ObjectOutputStream(buf);
  out.writeObject(o);
  out.flush();
  buf.close();
  return buf.size();
 }
    /**
     * 赋值对象,返回对象的引用,如果参数o为符合对象,则内部每一个对象必须可序列化
     * @param o对象,该对象必须继承Serializable接口即可序列化
     * @return
     * @throws IOException
     * @throws ClassNotFoundException
     */
 public static Object copy(final Object o) throws IOException,
   ClassNotFoundException {
  if (o == null) {
   return null;
  }
  ByteArrayOutputStream outbuf = new ByteArrayOutputStream(4096);
  ObjectOutput out = new ObjectOutputStream(outbuf);
  out.writeObject(o);
  out.flush();
  outbuf.close();
  ByteArrayInputStream inbuf = new ByteArrayInputStream(outbuf.toByteArray());
  ObjectInput in = new ObjectInputStream(inbuf);
  return in.readObject();
 }
}


例如:对象SMatrix

首先在定义类SMatrix时,必须为

public class SMatrix implements Serializable{
//***
}



一定要注意的一个问题是:所计算的对象必须要实现implements Serializable

相关文章推荐

查看磁盘剩余空间:Java代码改进

 【虎.无名】最近封装JMX的MBean,有一个监控磁盘空间的需求。在网上找遍了,列出了3种方法,第1种只能windows系统,第2种就不用说了,需要一个扩展库。至于用JNI则就没必要了。最新的jdk...

JAVA基础—一个对象占用多少字节

import java.lang.instrument.Instrumentation; import java.lang.reflect.Array; import java.lang.reflec...

JAVA对象所占内存大小计算例子

  • 2016年11月14日 20:56
  • 7KB
  • 下载

【如何查看java对象所占的内存大小】

我们为什么想要知道对象所占对内存的大小呢?   (1)做一些cache的时候,我们不可能把数据库的所有的数据都缓存到内存里面,我们要估计缓存的大小。   (2)内存泄露的时候,我们可以查看某些对象...

检测Java对象所占内存大小 (转载)

Don't pay the price for hidden class fields By Vladimir Roubtsov, JavaWorld.com, 08/16/02 Rece...

结构体在内存中所占字节大小计算

今天上课,老师给我们演示了一下,计算结构体在内存中所占的字节大小。开始给了我们几个例子,然后要我们自己mo...
  • QlNG
  • QlNG
  • 2014年04月29日 21:50
  • 601

Microsoft visual C++ 2010学习版中C语言基本数据类型所占字节大小(系统为64位win8.1)

使用sizeof函数分别测出各类型的字节大小:

如何计算对象或者类型所占的内存字节数(各种总结)

总结一下将sizeof用于各种类型对象或类型时其结果的算法。 1、认识sizeof sizeof是C/C++中的一个operator,其作用就是返回一个对象或者类型所占的内存字节数(byte)。返...

如何计算对象或者类型所占的内存字节数

总结一下将sizeof用于各种类型对象或类型时其结果的算法。 1、认识sizeof sizeof是C/C++中的一个operator,其作用就是返回一个对象或者类型所占的内存字节数(byte)...

如何计算对象或者类型所占的内存字节数(各种总结)

总结一下将sizeof用于各种类型对象或类型时其结果的算法。 1、认识sizeof sizeof是C/C++中的一个operator,其作用就是返回一个对象或者类型所占的内存字节数(byte)。返回值...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA中求解对象所占字节大小
举报原因:
原因补充:

(最多只允许输入30个字)