Java类对象内存布局
Java类对象内存布局
对象头
mark word
存储对象运行时数据,如 HashCode 、GC年龄代、线程以及锁相关的信息。
32位虚拟机中其大小为 4字节,64位虚拟机中其为 8字节。
类型指针
指向其类结构元数据(方法区中类信息),虚拟机通过这个来确定这个对象是哪个类的实例。
默认大小为4 字节,若64位虚拟机中取消指针压缩则为 8字节(Jdk 1.6之后默认开启指针压缩)。
数组长度
非必须存在,只有 数组类型的对象 才会存在该数据空间。
默认大小为4 字节
空白填充
只会在数组类型对象才会存在。
数组类型的对象 :
若是64位虚拟机且取消指针压缩则会产生 4字节 的空白填充。
实例数据
基础类型
如 int 4字节、long 8字节计算。
引用类型
存储对应引用对象地址的指针。
默认大小为4 字节,若64位虚拟机中取消指针压缩则为 8字节。
补齐填充
保证整个对象大小维持在 8字节的整数倍,不够整数倍大小则填充对象至8字节整数倍大小。