对象是如何布局的
对象在内存中存储的布局可以分3块区域:
对象头 ,实例数据 ,对齐填充
对象头:在内存分配中已经说过,一部分,保存对象本身的固有信息,一般占32bit或者64bit(和虚拟机的位数相匹配)
另一部分是其类型指针,指定了该对象是哪个类的实例
实例数据:
对象真正有效存储的信息,存储顺序会受到虚拟机的分批额策略参数和再java中定义的顺序有关,无论是从父类继承下来的还是子类本身有的,都需要记录
分配策略:先long/double ints, sharts/chars booleanoops(对象引用),在这个分配顺序的前提下,父类中定义的变量会在子类定义的变量之前,如果CompactFileds参数值为true,那么子类之中教窄的变量也可能插入到父类变量的空隙之中
填充补齐:不是必然存在的,只是起着占位符的作用,因为HotSpot Vm 中规定对象的大小必须是8个字节的整数倍。因此,当对象的实例数据部分没有对齐的时候,就需要填充补齐