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对象占堆内存多少个字节

abstract class SizeOf {               private final Runtime s_runtime = Runtime.getRuntime();     ...
  • qianlima210210
  • qianlima210210
  • 2016年05月03日 15:56
  • 1349

JAVA对象所占字节大小计算方法

该类为cache4j缓存框架中的工具类方法,该方法实现了两个接口接口1:计算对象在内存中所占字节数接口2:复制对象,实现深度克隆效果,实现原理为先序列化对象,然后在反序列化对象;返回一个新的对象,达到...
  • lxzo123
  • lxzo123
  • 2010年09月16日 22:09
  • 4491

JAVA——各类型所占字节数

都是些基础,没啥好说的。。基本概念 字节的单位是byte。位的单位是bit。1byte=8bit。 1bit能表示多少个数字——最小0,最大1。2的1次方个。 2bit能表示多少个数字——最小0...
  • as02446418
  • as02446418
  • 2015年07月30日 17:12
  • 1024

计算一个Java对象占用字节数的方法

本文实例讲述了如何计算(或者说,估算)一个Java对象占用的内存数量的方法。分享给大家供大家参考。具体分析如下: 通常,我们谈论的堆内存使用的前提是以“一般情况”为背景的。不包括下面两种情形: ...
  • huaweitman
  • huaweitman
  • 2016年03月10日 20:56
  • 3100

获取python对象占用空间的大小

获取python对象占用空间的大小
  • songchunyi
  • songchunyi
  • 2011年05月13日 10:36
  • 7152

Java中的八种基本数据类型所占字节的求法

ava中有八种基本数据类型,分别为:byte、short、int、long、float、double、char、boolean。 这八种基本类型都有对应的包装类,分别为:Byte、Short、Inte...
  • u011240877
  • u011240877
  • 2015年08月16日 14:27
  • 2394

VC中各数据类型所表示的范围和占用的字节数是多大?

VC中各数据类型所表示的范围和占用的字节数是多大?
  • wenhao_ir
  • wenhao_ir
  • 2016年05月06日 10:52
  • 499

java中一个汉字和一个字母所占内存字节比较以及后台验证的减半处理

基本概念 我们一般理解java中 一个字符char占2个字节byte 一个汉字占2个字节byte 一个字母占1个字节byte   其他情况 对于汉字来说,采用gbk编码占两字节,采用...
  • woshixuye
  • woshixuye
  • 2012年08月25日 20:00
  • 4391

Java中八种基本数据类型占用字节空间总结

基本数据类型 所占用空间大小
  • NTSDB
  • NTSDB
  • 2016年12月08日 23:23
  • 3152

测量Java对象所占内存大小

背景: 相信大部分人都不会关注这个问题吧,只有一些偏执狂才会抓着这些不放,我们平时写代码时经常会new ArrayList(),new String()之类的,那么这些刚new出来的对象在内存中占用多...
  • tianqishu11
  • tianqishu11
  • 2017年12月17日 00:40
  • 444
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA中求解对象所占字节大小
举报原因:
原因补充:

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