`

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对象大小

    NULL 博文链接:https://sdfx.iteye.com/blog/2201116

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

    NULL 博文链接:https://312256159-qq-com.iteye.com/blog/1582196

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

    JAVA对象所占内存大小计算例子,博文地址:http://blog.csdn.net/u012787710/article/details/53164226

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

    主要介绍了计算一个Java对象占用字节数的方法,较为详细的分析了Java中各类对象所占用的字节数,需要的朋友可以参考下

    测量Java对象大小的demo

    注入javaagent使用Instrumentation测量Java对象的大小

    计算java对象的大小的方法

    NULL 博文链接:https://treemanfm.iteye.com/blog/2038954

    java 对象 内存 大小

    有效测量出 java 对象 内存 大小 可供缓存等计算

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

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

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

    命令行: java -XX:+PrintCommandLineFlags -version 查看jvm默认参数 分别是 -XX:+UseCompressedOops 和 -XX:+UseCompressedClassPointers 这2个参数都是默认开启(+代表开启,-代表关闭) UseCompressedOops:普通...

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

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

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java获取list中两元素时间差

    java获取list中两元素时间差

    [java]读书笔记整理:一切都是对象

    这一约束限制了程序的灵活性,所以虽然某些java数据存储于堆栈中——特别是对象引用,但是java对象并不存储其中。 3) 堆 一种通用的内存池(也位于RAM区),用于存放所有的java对象。堆不同于堆栈的好处是:编译器...

    史上最全Java面试题目大集合

    面向对象计算始于这个基本概念,20. 即现实世界可以被描绘成一系列完全自治、封装的对象,21. 这些对象通过一个受保护的接口访问其他对象。 22. 多态性:多态性是指23. 允许不同24. 类的对象对同25. 一消息作出响应...

    java源码包4

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包3

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

Global site tag (gtag.js) - Google Analytics