类装载器

class装载验证流程

1、加载
  • 装载类的第一个阶段
  • 取得类的二进制流
  • 转为方法区数据结构
  • 在java堆中生成对应的java.lang.class对象
2、连接
  • 验证
    1)验证的目的:保证Class流的格式是正确的。

    • 文件格式的验证
      — 是否以0xCAFEBABE开头
      — 版本号是否合理
    • 元数据验证
      — 是否有父类
      — 继承了final类?
      — 非抽象类实现了所有的抽象方法。
    • 字节码验证
      — 运行检查
      — 栈数据类型和操作码数据参数吻合
      — 跳转指令指定到合理的位置
    • 符号引用验证
      — 常量池描述类是否存在
      — 访问的方法或字段是否存在且有足够的权限
  • 准备
    1)分配内存,并未设置初始值(方法区中)
    例如:public static int v=1;在准备阶段中,v会被设置为0.
    中才会设置为1。对于static final 类型,在准备阶段就会被赋上正确的值。publi static final int v = 1;

  • 解析
    1)符号引用替换为直接引用。
    在这里插入图片描述

3、初始化

1)执行类构造器,static 变量赋值,static{}语句。
2)子类的调用前保证父类的被调用。
3)是线程安全的。

什么类装载器ClassLoader

1、ClassLoader是一个抽象类,ClassLoader的实例将读入Java字节码将类装载到JVM中,ClassLoader可以定制,满足不同的字节码流获取方式,
ClassLoader负责类装载过程中的加载阶段
在这里插入图片描述
2、JDK中ClassLoader默认设计模式,分类

  • BootStrap ClassLoader(启动ClassLoader)
  • Extension ClassLoader(扩招ClassLoader)
  • App ClassLoader(应用ClassLoader /系统ClassLoader
  • Custome ClassLoader(自定义ClassLoader)
    每一个ClassLoader都有一个Parent作为父亲。
    3、JDK中ClassLoader默认设计模式 — 协同工作。

自底向上检查,自顶向下加载。
在这里插入图片描述
4、JDK中ClassLoader默认设计模式 --解决
Thread.setContextClassLoader()

  • 上下文加载器
  • 是一个角色
  • 用以解决顶层ClassLoader无法访问底层ClassLoader的类的问题。
  • 基本思想是,在顶层ClassLoader中,传入底层ClassLoader的实例。
    在这里插入图片描述

热替换

含义:当一个class被替换后,系统不需要重新启动,替换的类立即生效。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值