美文网首页
知道new⼀个对象的过程吗?

知道new⼀个对象的过程吗?

作者: 嘘寒问暖 | 来源:发表于2022-04-30 23:10 被阅读0次

    类加载过程

    当虚拟机遇⻅new关键字时候,实现判断当前类是否已经加载,如果类没有加载,⾸先执⾏类的加载机制,加载完成后再为对象分配空间、初始化等。

    1. ⾸先校验当前类是否被加载,如果没有加载,执⾏类加载机制

    2. 加载:就是从字节码加载成⼆进制流的过程

    3. 验证:当然加载完成之后,当然需要校验Class⽂件是否符合虚拟机规范,跟我们接⼝请求⼀样,第⼀件事情当然是先做个参数校验了

    4. 准备:为静态变量、常量赋默认值

    5. 解析:把常量池中符号引⽤(以符号描述引⽤的⽬标)替换为直接引⽤(指向⽬标的指针或者句柄等)的过程

    6. 初始化:执⾏static代码块(cinit)进⾏初始化,如果存在⽗类,先对⽗类进⾏初始化

    Ps:静态代码块是绝对线程安全的,只能隐式被java虚拟机在类加载过程中初始化调⽤!(此处该有问题static代码块线程安全吗?)当类加载完成之后,紧接着就是对象分配内存空间和初始化的过程

    1. ⾸先为对象分配合适⼤⼩的内存空间

    2. 接着为实例变量赋默认值

    3. 设置对象的头信息,对象hash码、GC分代年龄、元数据信息等

    4. 执⾏构造函数(init)初始化

    相关文章

      网友评论

          本文标题:知道new⼀个对象的过程吗?

          本文链接:https://www.haomeiwen.com/subject/zvruyrtx.html