类加载过程详解

类加载有五个过程:加载->验证->准备->解析->初始化

1、加载:加载是类加载的一个过程,加载的过程中,要完成三个步骤:     

  • 通过类的全限定名获取类的字节码文件
  • 将字节码转化为运行时数据结构
  • 在内存中生成一个class对象,作为方法区进入这个类的入口

        注意:对于数组不需要通过类加载的过程,有JVM动态构造出来的,但是内部的元素还是要通过类加载的过程。

2、验证

        验证是链接的第一步,主要是验证是否符合JVM规定的class文件格式

  • 文件格式验证

        主要判断是否符合class文件格式:是否一魔数开头,JVM版本是否符合,常量池的常量tag等

  • 元数据验证

        判断加载类是否有父类,是否继承了不允许继承的类,是否为抽象类,如不是是否实现了父类或者接口的所有方法

  • 字节码验证

        验证程序语义是否合法,是否符合逻辑,对类的方法体进行校验和分析

  • 符号引用验证

        验证类中引用的资源(类,变量,方法)是否存在,访问权限是否合法

3、准备

        准备是链接的第二步,目的是将类的静态变量分配内存,初始化默认值,主要还是八种数据类型,以及引用类型

        注意:boolean在内存当中存储的时候是按照int类型存储的,0表示true,1表示false

4、解析

        解析是链接的第二步,主要就是将类,接口,变量,方法的间接引用转化为直接引用

        符号引用:用一组符号来描述锁引用的目标,这个符号能定位到目标

        直接引用:直接指向目标的指针、偏移量以及能够间接定位到目标的句柄

5、初始化

        这是JVM类加载的最后阶段,执行类构造器里面的<cinit>方法,对类的静态变量和静态方法进行初始化操作

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bjzw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值