public class Student { private long id; private long userId; private byte state; private long createMillis; }
这是一个普通的java类,包含几个简单的字段,那么这个类生成一个对象占用多大的内存呢?
通常,说占40个字节就可以了。这是怎么算出来的呢?
1:拆分对象 对象头 对象数据 对象填充
2:分别计算
2.1:对象头 占12字节
对象头包含两个部分 :标记字 ,占用一个机器字,8字节; 类型指针,占一个机器字,8字节
特别说明:1:如果堆内存小于32GB,JVM会默认开启指针压缩,压缩后的指针占4个字节
2:如果是数组,对象头中还会多出一个 “数组长度”,int类型,占4字节。
2.2:对象数据 占 25字节
三个long数据 8*3=24字节,一个byte 1字节
2.3:对象填充
已经计算完的 合计 是37字节。那么填充多少字节?
java对象大小默认按8字节对齐,也就是是8的整数倍,那么需要填充3字节。
3:合计 12+25+3=40字节。