类是如何实例化的

类是如何加载和实例化的(执行角度)

加载分为五个部分,分别是:加载(生成class对象作为方法区的入口和确定类加载器)、验证(确保class文件的字节流信息是否符合虚拟机的要求)、准备(分配内存)、解析(将常量池的符号引用替换为直接引用的过程)和初始化(真正开始执行)

  1. 确认类元信息是否存在。在new的时候,JVM会先查看metaspace(元空间)中是否存在。如果不存在,再双亲委派模式下使用当前类加载器以ClassLoader+包名+类名为Key进行查找对应的.class未见。如果没有找到该文件,则抛出ClassNotFoundException;如果找到,则对该类进行加载,并生成对应的Class类对象。
  2. 分配对象内存。首先计算对象占用内存大小,然后进行同步操作,比如采用CAS保证分配操作的原子性。
  3. 设定默认值。成员变量值都需要设定默认值。
  4. 设置对象头。设置新对象的HASH值,GC信息,类元信息等。
  5. 执行init方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值