简单入门Java对象创建过程

Java创建对象的过程

  • image.png

类加载检查

  • 虚拟机遇到new指令时,会去常量池定位整个类的符号引用,并且检查类是否被加载过,解析和初始化过,如果没有就执行相应的加载过程

分配内存

  • 分配空间的大小在类加载完成后便可以得知

  • 分配内存有指针碰撞空闲列表两种

  • 通过Java堆是否规整决定使用不同的分配方式

    指针碰撞

    • 适用场景:堆内存规整(没有内存碎片)
    • 原理:将用过的内存全部整合到一边,没用过的整合到另一边,中间一个分界值指针,只需要沿着未用过的空间移动到与对象大小相等的距离
    • GC收集器:Serial,ParNew

    空闲列表

    • 使用场景:堆内存不规整的情况
    • 虚拟机会维护一个列表,该列表中会记录哪些内存块是可用的,在分配的时候,找一块足够大的内存来划分给对象实例
    • GC收集器:CMS

初始化零值

  • 内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零值,保证对象在不赋初值便可以使用

设置对象头

  • 虚拟机需要对对象进行必要设置,如何才能找到类的元数据信息,对象的哈希码,对象的GC分代信息

执行init方法

  • 把对象的字段按照自定义的方式进行初始化

你可能感兴趣的:(简单入门Java对象创建过程)