对象的创建过程

对象的创建过程

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

①jvm加载和分配内存。

②java对象初始化。

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

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

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

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

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

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

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

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

对象的创建过程_第1张图片

你可能感兴趣的:(java,java)