对象内存布局
对象头
作用:
1、存储运行时的数据,包括存储哈希吗、对象GC分代年龄、锁状态标志、线程持有的锁等。
2、类型指针,对象指向类元数据的指针,JVM通过这个指针来确定这个对象是哪个类的实例(根据对象确定其Class的指针)。
实例数据
定义:对象存储的有效信息
对齐填充
定义:JVM要求对象的大小必须是8的整数倍,若不是,需要补位对齐。
对象内存大小
对象头
在32位系统上占用8bytes,64位系统上占用16bytes。
实例数据
Primitive Type | Memory Required(bytes) |
boolean | 1 |
byte | 1 |
short | 2 |
char | 2 |
int | 4 |
float | 4 |
long | 8 |
double | 8 |
reference类型在32位系统上每个占用4bytes, 在64位系统上每个占用8bytes。
对齐填充
HotSpot的对齐方式为8字节对齐,公式:(对象头 + 实例数据 + padding) % 8等于0且0 <= padding < 8
指针压缩
对象占用的内存大小收到VM参数UseCompressedOops的影响。