jvm 对象在内存中存储的布局

jvm  对象在内存中存储的布局有三部分:对象头、实例数据、对齐填充。

1、对象头:运行时数据、类型指针、数组长度。

(1)运行时数据:hashcode哈希码、锁状态标志、线程持有的锁、GC年龄分代等,有些不是固定不变的,在运行时会根据当时的状态进行修改。

(2)类型指针:指向方法区中类型信息的指针。类型信息就是编译后的代码以及其他关于这个类的数据信息。

(3)数组长度:如果对象是数组,对象头中还会存有数组长度。如果不是数组则没有该数据。

2、实例数据:就是对象中各实例字段的数据,对象的实例字段存储的要么是基本类型,要么就是其他对象的引用。

3、对齐填充:jvm要求对象的内存占用大小必须是8字节的整数倍,而对象头与实例数据相加有些时候不一定是8字节的整数倍,所以,对齐填充就是再填充一些特定标志数据使得    对象头+实例数据+填充数据   为8字节的整数倍。

猜你喜欢

转载自blog.csdn.net/qq_36951116/article/details/83276242