对象的内存布局分为三部分,分别是对象头,实例数据以及对齐填充
对象头包含两个部分。
第一部分为自身的运行数据,即 Mark Word,包含哈希码,GC分代年龄,锁标志状态,线程持有的锁,偏向线程ID,偏向时间戳等。
第二部分为类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例,并不是所有的虚拟机实现都必须保留类型指针,如果是java数组,对象头中必须有一块是记录数组长度的数据
实例数据为对象真正存储的有效信息,即程序代码中所定义的各个类型的字段内容。
对齐填充不一定有,Hotspot 要求对象的大小必须是8字节的整数倍,对象头大小是8字节的1倍或2倍,如果实例数据不是8字节的整数倍时,由对齐填充部分进行补充。
网友评论