首页 > 代码库 > 记一次对java对象在内存中的分析

记一次对java对象在内存中的分析

java 对象 占内存大小 计算方式 及 常用类型的占用

HotSpot的对齐方式为8字节对齐 ----计算公式:(对象头 + 实例数据 + padding) % 8等于0且0 <= padding < 8

Hotspot 机 中 普通对象
32位 对象头 占 8个字节 引用类型 占 4字节
64位 对象头 占 16个字节 引用类型 占 8字节

64位中
空对象数组 对象头 占 24 增加一个长度 增加 一个引用类型的长度 64位中是 8
空的基本数据类型数组 对象头 占 24 增加一个长度 增加一个基本数据类型自身的 长度


64位 压缩后

普通对象 对象头 占 12个字节 引用类型 占 4字节

数组对象压缩后 对象头 占 16
增加一个长度 增加一个基本数据类型自身的 长度
----因为 java 的跨平台性,所以基本类型的数据在32位和64位上占内存大小是一样的

1Bytes = 8bit cpu一次能处理的数据位数----32位和64位----4字节和8字节

对象头的内存布局

对象自身的运行数据 占一次cpu 指向对象实例的指针 占 一次cpu
数组比较特殊,因为要把数据长度存到头部,所以又要占 一次cpu

以上可以看出 普通对象的对象头 有两部分 而 数组对象有三部分
可以推算出
32 位 普通对象 的对象头 是 8 数组 的对象头是 12
64 位 普通对象 的对象头 是 16 数组 的对象头是 24

记一次对java对象在内存中的分析