0
点赞
收藏
分享

微信扫一扫

JVM 创建对象过程

mm_tang 2022-01-04 阅读 108

Java 中对象的创建方式一般有两种:1)new xxx() 通过new关键字创建实例对象;2)通过反射创建对象。不管哪一种创建方式,JVM 底层的执行过程是一样的。
在这里插入图片描述

示例程序:

public class Person {//静态变量
    public  static  int staicVariabl=1;
    //成员变量
    public   int  objVariabl;//静态初始代码块
    static {
        staicVariabl=2;
    }//对象初始化代码块
    {
        objVariabl=88;
    }//构造方法
    public Person() {
        objVariabl=99;
    }public static void main(String[] args) {
        Person person=new Person();
    }}

1、检查类是否加载

当需要创建一个类的实例对象时,需要先判断该类是否被成功加载过,若没有加载,要先进行类的加载,如果加载过,会在堆区有一个类的 Class 对象,方法区会有类的相关元数据信息

(2)连接阶段:会对静态变量的值进行默认赋值,此时 Person 类的 staicVariabl 赋值为0

(3)初始化阶段:首先会对类的静态变量 staicVariabl 进行显示赋值(此时staicVariabl =1);然后收集类的静态代码块内容,生成一个类的 <clinit>() 方法并执行(此时staicVariabl =2)

2、创建对象

当我们执行上面代码中 main 方法中的的 Person person=new Person() 时,我们的对象就开始创建了。

(1)main 线程申请栈空间

(2)分配内存并实例变量初始化默认值

(3)初始化对象

(4)引用对象

3、对象在内存的布局

对象创建完成后在内存中保存了保存的信息包括对象头、实例数据及对齐填充三类信息。

(1)对象头

(2)实例数据

(3)对齐填充

Person 对象最终创建完成后内存中数据情况大概如下图:
在这里插入图片描述

举报

相关推荐

0 条评论