对象内存布局
对象在JVM中是如何存储的?
对象头中都有哪些东西?
一:对象头(Header)
1> 标记字(MarkWord)
- HashCode
- GC分代年龄
- 对象持有的锁
- 对象持有的锁状态
- 线程ID
- …
2> 类型指针(Class Pointer)
- 指向元数据类型(指明当前类类型)
- obj.getClass()
二:实例数据(Instance Data)
1> 父类数据
2> 子类数据
三:对齐填充(Padding)
确保内存规整
64位CPU,内存对齐大小为8B,不够的部分使用空内容进行填充。
附加图片(理解性)
四:JOL查看对象内存布局
String s = ClassLayout.parseInstance(ts[0]).toPrintable();
Q1: 子类中父类的成员变量在内存中如何存放?