`

Java对象大小的计算方式

阅读更多
首先我们需要知道的是 Java 对象是包含三部分数据的:
1.对象头
2.实例数据
3.对齐填充(可能没有,因为 java 中规定对象的起始地址必须是 8 bytes 的正数倍)

对于普通对象而言,对象头中包括 mark word(8 bytes)、kclass(没有开启压缩的时候是 8 bytes,开启压缩了的话,就是 4 bytes),如果是数组类型的对象话,这里还有一个数组长度字段,4字节.

在 JDK6 64位 23 update+ 之后都默认开启了指针压缩功能.

现在验证 java 对象占几个字节.

public class Person {
    int age;
}

我使用的是64位jdk1.8,按照理论分析,Person 对象应该占的字节数:
8(mark word) + 4(kclass) + 4(实例数据) + 0(不需要对齐填充) = 16B.

而通过 visualVM 工具查看的结果也是 16B.

现在来分析下数组的内存占用情况.

public class ObjectHeaderSizeTest {
    public static void main(String[] args) {
        Person[] person = new Person[4];
        System.out.println(person);

        Thread.currentThread().suspend();
    }
}

首先我们知道 Person 对象占 16B,那么 person 占用的字节数为:
8 + 4 + 4 + 8 * 4 + 0 = 48B.
1
1
分享到:
评论

相关推荐

    计算java对象大小

    总结来说,理解Java对象大小的计算对于优化内存使用、防止内存泄漏以及提高应用程序性能至关重要。开发人员需要了解不同方法的优缺点,并根据实际需求选择合适的方式。同时,应当注意,过于关注单个对象的大小可能...

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

    为了计算对象大小,我们需要借助一些第三方库或者自行实现。 一个常见的第三方库是`DeepSizeOf`,它来自Eclipse Collections框架,提供了类似于C++中的`sizeof`操作。使用这个库,你可以很容易地计算出一个对象及其...

    计算java对象的大小的方法

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

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

    总结起来,Java对象的内存大小计算涉及对象头、实例数据和对齐填充的综合考虑。通过`Unsafe`类或`Instrumentation`接口,我们可以获取这些组成部分的具体大小,进而了解一个Java对象在内存中的占用情况。这样的知识...

    测量Java对象大小的demo

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

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

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

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

    总的来说,理解Java对象在内存中的表示方式和占用空间,结合合适的工具进行监控,是开发高效、稳定的Java应用的基础。通过深入学习这些知识点,开发者可以更好地优化程序,提高系统资源利用率,避免因内存问题导致的...

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

    总结来说,这个例子旨在帮助开发者理解Java对象在内存中的表示方式,以及不同类型和结构的对象如何影响内存使用。通过这种方式,开发者可以优化代码,减少不必要的内存开销,提高应用程序的效率。同时,这也提醒我们...

    Java 对象(数组)占多大空间(几个字节) 手把手做实验

    总之,Java对象和数组的内存占用取决于JVM的配置、对象的字段、数组的元素类型和长度等因素。开启或关闭压缩选项会影响对象和数组引用的大小,进而影响整体的内存占用。对于内存优化和性能调优来说,了解这些细节至...

    java-sizeof-0.0.4:一个查看java对象占用内存大小

    本文将深入探讨Java中的对象内存占用,以及如何使用"java-sizeof-0.0.4"工具来查看Java对象在内存中的大小。 在Java中,内存主要分为堆内存(Heap)和栈内存(Stack)。对象通常存储在堆内存中,而基本类型的变量和...

    JAVA对象以及数据的工具类

    本篇文章将深入探讨Java中的对象、基础类型以及数据处理相关的工具类。 首先,让我们关注Java中的基础类型。Java有八种原始数据类型:byte、short、int、long、float、double、char和boolean。为了方便处理这些类型...

    java对象缓冲实现中间件

    Java对象缓冲实现中间件是一种高效的数据存储和访问机制,它通过在内存中创建一个对象池来减少对硬盘或网络资源的频繁访问,从而提高应用程序的性能。这种中间件设计的核心理念是利用内存的高速访问特性,将常用或者...

    java字符串内存计算

    在Java中,直接获取一个对象所占用的内存大小并非易事。常见的做法是在运行特定代码之前记录当前的内存状态,待代码执行完成后,触发垃圾回收机制,并再次记录内存状态。通过对比两次内存状态的变化,可以估算出代码...

    计算机后端-Java-Java核心基础-第15章 面向对象07 21. 接口练习:比较对象大小.avi

    计算机后端-Java-Java核心基础-第15章 面向对象07 21. 接口练习:比较对象大小.avi

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

    4. **深/浅拷贝**:在计算对象大小时,需要区分深拷贝和浅拷贝。浅拷贝只复制对象本身,不包括引用的对象;深拷贝则会递归复制所有引用的对象,因此深拷贝的内存占用通常大于浅拷贝。 5. **垃圾收集与内存管理**:...

    JAVA版的WINDOWS计算器

    在计算机编程领域,Java是一种广泛使用的高级编程语言,以其跨平台性和面向对象的特点深受开发者喜爱。本项目是基于Java实现的一个仿Windows附件中的计算器程序,旨在提供基本的数学运算功能,并为Java初学者提供一...

    java图片压缩文件大小图片大小(支持gif动态图)

    这个主题主要涉及如何利用Java来减少图片文件的大小,包括静态图片(如JPEG、PNG)以及动态图片(如GIF)。下面我们将深入探讨相关的知识点。 首先,Java中的核心库`javax.imageio`提供了对图片读取、写入和处理的...

    java 水印(水印适应图片大小,但个别图片太小不支持)

    本知识点主要探讨如何在Java中实现自适应图片大小的水印功能,以及遇到图片过小时的处理策略。 首先,我们需要理解水印的基本概念。水印是在图像或文档上添加的一种视觉标记,它可以是文字、图像或者图形,用于表明...

    java实验报告计算机

    在面向对象的编程中,类是用于定义对象的蓝图,这里`Calculator`类包含了创建和操作图形界面以及执行计算所需的所有方法和属性。 #### 2. 创建图形界面组件 在代码中可以看到,`Calculator`类通过继承`Frame`类来...

Global site tag (gtag.js) - Google Analytics