开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情
给定我们一个类,如果需要我们分析该对象的内存占用?
这是一个问题,如果给定我们一个类,然后需要我们分析出这个对象可能存在的内存占用情况该怎么分析,比如一个下面这个 Order 类
public class Order{
private long orderId;
private long userId;
private byte state;
private long creatTime;
}
Order 对象中对应着四个 private 的字段,会发现这个类里面有 orderId、userId、creatTime 为 long型,一般来说每个 long 型占用 8 个字节,这里的三个 long 型则应该占用 24 个字节,同时 byte 它是占用 1 个字节。
所以会发现这个类里面它的所有成员变量就占据了 25 个字节的样子,如果我们把这个对象 new 出来的话它应该还会有对象头,所以呢还需要进行一个具体的分析。
上面分析出了实例数据占据着 25 个字节,然后需要分析的是对象头。
首先它是一个对象,那么存储对象自身运行时数据是占据着 8 个字节。
然后就是一个类型指针,类型指针的话在默认的情况下是开启指针压缩的,所以默认情况下它是占据着 4 个字节的样子。所以对象头总共是占据着 12 个字节的样子。
然后对象头 + 实例数据 应该是等于 37 个字节的样子,但是 37 个字节它是不符合对象占据空间的规则,所以对象里面还有一个对齐填充。
对齐填充就是对象整个的占用大小应该是 8 字节的整数倍,所以这里 应该是给 3 个字节进行填充,所以最终给这个对象填充成 40 个字节的对象。
所以最终这个对象所占据的内存大小是 40 个字节。