参考
两种计算方法:instrumentation与unsafe反射
完整的Java对象表示模型-“OOP-Klass”二分模型
JVM参数UseCompressedOops对“对象头”的影响
总结
对象在Hotspot JVM堆中的构成
对象头
- _mark : 固定8个字节
元数据指针
- 指向方法区中的类对象 : 不压缩为8字节,压缩为4字节
数组长度(只有该对象是数组对象时才有)
- 描述数组长度需要4个字节
实例数据
- 基本类型 : 参见基本类型占用字节数
- 对象引用 : 32位机器中为4字节,64位机器中为8字节(开启压缩后为4字节)
填充 padding
- 使得整个Java对象的字节数为8的倍数(0 <= padding < 8)
注:计算某对象字节大小要递归计算该对象所包含全部对象的大小
基本类型占用字节数
type | size(bytes) |
---|---|
boolean | 1 |
char | 1 |
short | 2 |
int | 4 |
float | 4 |
long | 8 |
double | 8 |
基本类型占用字节数
type | size(bytes) |
---|---|
boolean | 1 |
byte | 1 |
char | 2 |
short | 2 |
int | 4 |
float | 4 |
long | 8 |
double | 8 |