new一个对象的过程

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

  1. ⾸先校验当前类是否被加载,如果没有加载,执⾏类加载机制
  2. 加载:就是从字节码加载成⼆进制流的过程
  3. 验证:当然加载完成之后,当然需要校验Class⽂件是否符合虚拟机规范,跟我们接⼝请求⼀样,
    第⼀件事情当然是先做个参数校验了
  4. 准备:为静态变量、常量赋默认值
  5. 解析:把常量池中符号引⽤(以符号描述引⽤的⽬标)替换为直接引⽤(指向⽬标的指针或者句柄等)的
    过程
  6. 初始化:执⾏static代码块(cinit)进⾏初始化,如果存在⽗类,先对⽗类进⾏初始化
    Ps:静态代码块是绝对线程安全的,只能隐式被java虚拟机在类加载过程中初始化调⽤!(此处该有问题
    static代码块线程安全吗?)
    当类加载完成之后,紧接着就是对象分配内存空间和初始化的过程
  7. ⾸先为对象分配合适⼤⼩的内存空间
  8. 接着为实例变量赋默认值
  9. 设置对象的头信息,对象hash码、GC分代年龄、元数据信息等
  10. 执⾏构造函数(init)初始化
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值