• 对象的创建过程


    对象的创建过程

    基于两个方面回答这个问题:

    ①jvm加载和分配内存。

    java对象初始化。

    1.在实例化一个对象的时候,JVM首先会去检查目标对象是否已经被加载并初始化了

    2.如果没有,JVM需要立刻去加载目标类,然后调用目标类的构造器完成初始化。①目标类的加载是通过类加载器来实现的,主要就是把一个类加载到内存里。②然后初始化的过程,主要是对目标类里面的静态变量、成员变量、静态代码块进行初始化。

    3.当目标类被初始化以后,就可以从常量池里面找到对应的类元信息,并且目标对象的大小在类加载之后就已经确认了,所以这个时候就需要为新创建的对象,根据目标对象的大小在堆内存里面分配内存空间。内存分配的方式一般有两种,一种是指针碰撞,一种是空闲列表,JVM会根据java堆内存是否规整来决定内存分配方式。

    4.接下来,JVM会把目标对象里面的普通成员变量初始化为零值,比如int类型初始化为0,对象类型初始化为null,(类变量在类加载的准备阶段就已经初始化过了)。

    这一步操作主要是保证对象里面的实例字段,不用初始化就可以直接使用,也就是程序能够获得这些字段对应数据类型的零值。

    然后,JVM还需要对目标对象的对象头做一些设置,比如对象所属的类元信息、对象的GC分代年龄,hashcode,锁标志等等。

    完成这些步骤之后,对jvm来说,新对象的创建工作已经完成。但是对于java语言来说,对象创建才算开始。

    接下来要做的,就是执行目标对象内部生成的init方法,初始化成员变量的值、执行构造块、最后执行目标对象的构造方法,完成对象的创建。其中init方法是java文件编译后在字节码文件中生成的,它是一个实例构造器,这个构造器会把语句块、变量初始化、调动父类构造器等操作组织在一起。所以调用init方法能够完成一系列的初始化动作。

    在这里插入图片描述

  • 相关阅读:
    echarts图表toolbox工具箱配置
    【python】头匹配,尾匹配
    Exercise 09
    第10章Linux实操篇-定时任务调度
    MybatisPlus拓展——实现多数据源操作
    python
    Text-to-SQL小白入门(五)开源最强代码大模型Code Llama
    树莓派 ubuntu18.04安装ROS
    引入gitlab仓库代码到npm包的教程
    NumPy 数组索引 切片
  • 原文地址:https://blog.csdn.net/weixin_45817985/article/details/133064072