Java虚拟机学习记录,HotSpot对象创建

来源:互联网 发布:王晓东视频 算法 编辑:程序博客网 时间:2024/06/05 05:11

使用new关键字创建普通对象(非Array、Class等对象?)的过程

  1. 查找类信息
    根据new指令的参数去确认对应的类信息是否已经被加载、解析、初始化过,如果上述过程完成,则进行下一步;如果没有,则需要首先对类进行加载、解析、初始化。

  2. 分配内存
    当类被加载完成后,类对应对象的内存大小就可以确定了,普通对象的内存可以分为三部分,对象头、实例数据、填充数据。
    a.对象头
    对象头包括两部分,自身运行所需数据(如hashcode\gc年龄等)、指向类元数据的指针
    b.实例数据
    实例数据是对象的真实有用的数据即对象的字段数据,其字段布局顺序由HotSpot的默认策略(long/double,int,char/short,boolean/byte,reference point)和字段的定义顺序决定;
    子类会继承父类的字段,并且创建子类对象时也会为继承来的字段分配内存,遵循上述的字段布局策略的前提下,同长度的情况父类的字段在子类字段之前
    c.填充数据
    填充数据仅为了字节对齐

  3. 赋零值
    对象内存分配完成后,会除对象头外的内存片段初始化为对应的零值。