JVM-类装载器

类装载器

是什么

我们敲的代码即.java文件经过编译之后得到.class文件,然后这个文件通过JVM的虚拟机加载的到内存中,并形成一个class对象,这个称之为类的加载过程,负责将.class字节码文件加载到内存的工具称之为类加载器。
下面来说说类加载的过程

过程

加载

  • 装载类的第一个阶段
  • 取得类的二进制流
  • 转为方法区数据结构
  • 在java堆中生成对应的java.lang.Class对象

链接

验证
  • 目的:保证class流的格式是正确的
    • 文件格式的验证
      • 是否以0xCAFEBABE开头
      • 版本号是否合理
    • 元格式的验证
      • 是否有父类
      • 基础了final类
      • 非抽象类实现了所有的抽象方法
    • 字节码验证
      • 运行检查
      • 栈数据类型和操作码数据参数吻合
      • 跳转指定指令到合理的位置
    • 符合引用验证
      • 常量池中描述类是否存在
      • 访问的方法或字段是否存在且有足够的权限
准备
  • 分配内存,并为类设置初始值(方法区中)
    这里写图片描述
解析
  • 符号引用替换为直接引用,class具体运行过程中,才能索引到它要引用的内容
    这里写图片描述
初始化
  • 执行类构造器
    • static变量 赋值语句
    • static{}语句
  • 子类的调用前保证父类的被调用
  • 是线程安全的

什么是类装载器ClassLoader

  • ClassLoader是一个抽象类
  • ClassLoader的实例将读入java字节码将类装载到jvm中
  • ClassLoader可以定制,满足不同的字节码流获取方式
  • ClassLoader负责类装载过程中的加载阶段

jdk中ClassLoader默认设计模式

这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阳光下是个孩子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值