java类的加载过程

类的加载过程

从加载到使用需要经过加载-连接-初始化-使用-销毁
在这里插入图片描述

详细讲
加载:从开发的.java文件由javac编译成.class文件,然后jvm把.class文件转换成某种静态数据结构存储到方法区,并生成可以被使用的java.long.class对象存放到堆中。
连接又划分为 验证-准备-解析三个步骤
验证:是对文件格式,元数据和字节码、以及符号引用做相应的验证,但是文件格式的验证其实是发生在加载阶段,文件格式正确才会继续加载,元数据和字节码就是对class静态结构进行语法和语义上的验证,保证不会产生危害jvm的行为,在元数据和字节码验证通过后,会暂时认为该class是安全的,还有一道对符号引用的验证是在解析阶段进行的。我们也可以发现这些验证其实是分散在不同的环节的。
准备:准备阶段是对class对象的静态变量进行赋值的操作,值类型赋0,引用类型赋null
解析:是对class中的符号引用替换成直接引用的过程。
解析又分为静态解析动态解析
静态解析是class中调用的是一个具体的实现类,假设有A B两个class A引用B 当A发生类加载时发现B没有加载,就会触发B的类加载,加载完成后会吧A中的符号引用替换成B的实际地址,这称为直接引用,也就是静态加载。
动态加载是当class所引用的是接口或者抽象类,并不是具体的类,这时候就等在实际的运行过程中发生了调用,此时再进行解析就能明确的替换为引用的实际地址,这也是为什么解析有时会发生在初始化之后的原因。
初始化:会判断代码中是否有主动的资源初始化操作,比如成员变量 静态变量的赋值动作,以及静态代码块的逻辑加载。

在这里插入图片描述
元数据:class的描述信息包括版本、属性、方法、接口等描述信息。
引用关于大佬的jvm介绍
https://www.zhihu.com/question/456438264/answer/2406849899

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值