对象的内存布局
java中对象的内存布局分为对象头、实例数据、对齐填充三部分组成;
对象
/ | \
对象头 实例数据 对齐填充
| | |
1.标记字段(hashcode,锁状态,GC年龄,线程id,时间戳) 存储对象的成员变量 8字节对齐,如果不是8的倍数会填充一些空字节
2.类型指针(指向对象的类元数据,类信息,方法表,字段信息)
一个空对象占多少字节
16字节,因为对象头是8字节,类型指针占8字节,实例数据占0字节,填充字节占0字节
tips:boolean类型对象本身占1字节,但在对象中还需要对象头和填充字节占8字节,所以对象大小为16字节
hotspot字段大小
| 类型 | 大小 |
|---|---|
| boolean | 1 byte |
| byte | 1 byte |
| short | 2 bytes |
| char | 2 bytes |
| int | 4 bytes |
| float | 4 bytes |
| long | 8 bytes |
| double | 8 bytes |
| reference | 4 bytes(压缩指针) |