对象本身结构描述方式–>以字节码存储在方法区中
对象的头部
- 对象的头部指针
- class对象的描述
- 内部方法
- 属性入口
- Mark word
- 是否加锁
- GC标志位
- monior GC次数
- hashCode
- 其他
32bit 系统 :指针4byte + 4byte Mark Word,如果是数组4byte描述数组的长度。
64bit 系统:开启指针压缩(-XX:useCompressedOOPS)指针4byte + Mark Word 8byte。未开启压缩:指针8byte + Mark Word 8byte
eg:new Object()。32bit 系统为例
对象 = mark word + class 指针 + body + 对齐字节(补位字节)
补位字节均补位到8byte的倍数
4 Mark Word + 4byte的class指针 + 0byte + 0 对齐字节 = 8byte 【new Object()】
注意:静态属性占用的空间,不计算到对象本身,它的引用保存在方法区。
有继承的对象属性排布:
```
1、父类子类有同一个对象头部
2、父类的属性被分配到相应的对象中
3、父类到子类的属性 做一次对齐
4、8byte对齐
class A{byte b;}
class B extend A{byte b;}
class C extend B{byte b;}
字节分布:8byte 头部 (4byte 指针+4byte Mark Word) + 1byte + 3byte【补位字节】 + 1byte + 3byte【补位字节】 + 1byte + 3byte【补位字节】 + 4byte 【class的补位字节】
总计 24byte