`
_Leo_Lee_
  • 浏览: 5599 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多
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();
 }
}

 

分享到:
评论

相关推荐

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

    本篇文章将深入探讨如何计算Java对象占用的内存字节数,以及影响这一数值的因素。 首先,Java对象在堆内存中由四个部分组成:对象头(A)、基本类型域(B)、引用类型域(C)和填充物(D)。 **对象头(A)**: ...

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

    本文将深入探讨如何计算Java对象所占内存,并通过提供的代码示例进行详细解析。 首先,我们需要理解Java对象内存占用的基本原理。每个Java对象都由三部分组成:对象头(Object Header)、实例数据(Instance Data)...

    计算java对象大小

    5. **代码实现**:编写一个简单的Java程序,创建对象并利用Java的反射API来遍历其所有字段,结合各字段的大小计算总和。这种方法同样需要考虑到对象头和对齐填充的影响。 总结来说,理解Java对象大小的计算对于优化...

    统计缓存(java对象所占的内存)大小

    本文将深入探讨如何统计缓存(尤其是Java对象)所占的内存大小,以及这对理解程序内存消耗的重要性。 首先,我们要知道Java对象的内存开销主要由三部分组成:对象头、实例数据和对齐填充。对象头包含对象的类型信息...

    计算java对象的大小的方法

    本文将深入探讨如何计算Java对象的大小,以及这个知识点在实际开发中的应用。 首先,Java对象的大小不仅仅包括其字段的大小,还包括对象头(object header)的大小,对于HotSpot虚拟机,它包含了对齐填充、Mark ...

    java 通过sizeOf计算一个对象的大小

    总的来说,通过`sizeOf`计算Java对象的大小是一项复杂的工作,涉及到JVM内部的内存管理和对象表示。尽管Java API没有直接提供这样的功能,但我们可以借助第三方库或自定义工具来实现。理解对象大小对于优化内存使用...

    测量Java对象大小的demo

    本示例“测量Java对象大小的demo”提供了一种方法,通过使用Java的`java.lang.instrument`包来注入`javaagent`,进而利用`Instrumentation`接口测量Java对象的精确内存占用。下面我们将详细探讨这一过程。 首先,`...

    Java字节流 .pdf

    Java字节流是一种用于处理字节数据的流处理机制,在Java中,字节流不包含边界数据的连续流,字节流是由字节组成的,Java里字符由两个字节组成。字节流是最基本的,它是按字节来处理二进制数据。 字节流基类有:字节...

    java基本数据类型字节大小 hibernate运行原理

    综上所述,Java的基本数据类型及其字节大小对于理解内存使用和优化性能非常重要。同时,Hibernate作为一款强大的ORM框架,不仅简化了数据库操作,还提高了开发效率和代码的可维护性,是Java开发者不可或缺的工具之一...

    测试java对象占用内存大小的例子

    首先,`SizeOf.java`可能是一个实现自定义内存大小计算的类。在Java中,由于垃圾回收机制的存在,直接获取对象的内存占用并不像C++等语言那样简单。通常,我们可以使用一些工具或API来帮助我们。例如,`sun.misc....

    java字符串内存计算

    本文将深入探讨如何在Java中计算字符串所占用的内存空间,包括现有的计算方法、其局限性以及具体的计算公式。 #### 计算内存占用的传统方法及其局限性 在Java中,直接获取一个对象所占用的内存大小并非易事。常见...

    java字节码英文期刊

    本文旨在探讨Java字节码的成本分析框架,解决由其非结构化的控制流、操作数栈以及面向对象特性所带来的复杂性问题。 #### 二、Java字节码及其特点 Java字节码是一种中间代码形式,它由Java编译器生成,并且可以在...

    03.Java对象初始化1

    因此,如何计算一个对象的大小可以确定了普通对象:8 字节的对象头 + 4/8 字节的对象指针 + 数据区(包括父类)+ padding(8 的倍数)数组对象:8 字节的对象头 + 4/8 字节的对象指针 + 4 字节素组长度 + 数据区 + ...

    计算对象占用内存空间ObjectSize-master.zip

    3. **对齐填充**:为了内存访问效率,Java对象的总大小通常会被对齐到特定的字节边界,比如8字节。如果对象总大小不是对齐字节的倍数,那么会添加填充字节来达到对齐要求。 4. **深/浅拷贝**:在计算对象大小时,...

    Java之基本数据类型 Sizeof 大小

    `Sizeof` 在Java中并不存在,与C++等语言不同,Java没有提供直接计算对象或变量在内存中占用字节数的内置方法。然而,我们可以探讨Java的基本数据类型及其内存占用。 1. **整型数据类型**: - `byte`: 占用1个字节...

    java面向对象语言的实验报告

    这份实验报告的内容涵盖了Java面向对象编程的基础知识和实践技能。它不仅介绍了Java语言的基本概念,还提供了具体的编程练习和实验步骤,帮助学习者加深对Java语言的理解和应用。以下是报告中所涉及的关键知识点和...

    Java技术与Java虚拟机

    方法区存储类信息,堆存放对象,每个线程有自己的Java栈和程序计数器,本地方法栈处理本地方法调用。 JVM执行指令的方式非常直接,通过内层循环取出并执行一个操作符字节,指令集设计简洁,有助于提高执行效率。...

    java计算器程序,该计算器程序能够直接运行,因为已经编译好了字节码

    总而言之,这个Java计算器程序展示了Java编程的基础知识,包括面向对象编程、GUI设计、事件处理、异常处理和类库的使用。通过这个程序,学习者可以深入理解Java语言的核心概念,并进一步掌握构建实用应用程序的技巧...

    如何计算Java对象占用了多少空间?

    这里我们将深入探讨计算Java对象占用空间的方法。 首先,每个Java对象都包含一个对象头(Object Header),它存储了一些元数据信息。对象头通常由两部分组成: 1. **Mark Word**: 这部分存储了对象的哈希码、锁...

    最新Java面试题

    - JRE(Java Runtime Environment):包含JVM及运行Java程序所需的库文件,但不包含编译工具。 - **Java三种注释类型**:单行注释(`//`)、多行注释(`/* ... */`)和文档注释(`/** ... */`),其中文档注释可以...

Global site tag (gtag.js) - Google Analytics