JVM类加载1-加载

笔者博客地址:https://charpty.com

JVM(本系列统指sun的HotSpot虚拟机1.7版本实现)加载类一共分为5步,分别是:1、加载 2、验证 3、准备 4、解析 5、初始化,简要的流程图如下
这里写图片描述

“加载”是“类加载”的第一个步骤,“类加载”的总指挥是ClassLoader,加载步骤大多都是异步的,各个阶段都有交叉进行甚至仅在需要时才进行(如晚解析),不像图中这样规矩。但按照JVM规范中指明“A class or interface is completely loaded before it is linked”,所以虽然HotSpot实现有特性,但“加载”可以认为是同步的,且只有当“加载”步骤完成后才能进行后续动作。

“加载”,顾名思义就是要将*.class的文件读到内存中,读成虚拟机可以认识的结构体,做的事情比较简单,我们可以把它细化成3件事:

  1. 读取此类的二进制字节流
  2. 将字节流转换为运行时的数据结构
  3. 生成java.lang.Class对象

“加载”的动作主要在classLoader.cpp(指包含类的子类)classFileParser.cpp文件中实现,在笔者看的1.7版本中,后者有4689行代码,算是篇幅比较大的类(C++)了。

一、读取此类的二进制字节流

拿本地文件系统来说,读取一个类的二进制流无非就是读本地的一个*.class文件,但是JVM规范并没有限定一定要从本地读取类的二进制字节流,这给开发人员提供了很大的想象空间,目前很多的类加载技术都是依托于这点,举几个例子:

  1. 大家熟悉的JSP应用,JSP
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值