第23讲 | 请介绍类加载过程,什么是双亲委派模型?

Java 的类加载机制:

class装载验证流程:

加载:(ClassLoader

        装载类的第一个阶段

取得类的二进制流

转为方法区数据结构

在Java堆中生成对应的java.lang.Class对象

链接

    验证:

    目的:保证Class流的格式是正确的

文件格式的验证

是否以0xCAFEBABE开头

版本号是否合理

元数据验证

是否有父类

继承了final类?

非抽象类实现了所有的抽象方法

字节码验证 (很复杂)

运行检查

栈数据类型和操作码数据参数吻合

跳转指令指定到合理的位置

符号引用验证
常量池中描述类是否存在
访问的方法或字段是否存在且有足够的权限

    准备:

分配内存,并为类设置初始值 (方法区中)

public static int v=1;

在准备阶段中,v会被设置为0

在初始化的<clinit>中才会被设置为1

对于static final类型,在准备阶段就会被赋上正确的值

public static final  int v=1;

    解析:

            符号引用替换为直接引用;

            (字符串引用对象不一定被加载\指针或者地址偏移量引用对象一定在内存)

初始化:

    执行类构造器<clinit>

    static变量 赋值语句

    static{}语句

    子类的<clinit>调用前保证父类的<clinit>被调用

    <clinit>是线程安全的


类装载器ClassLoader:

负责类装载过程中加载阶段,抽象类,它的实例 装载到jvm 中,

方法有:loadclass,defineclass,findclass,findLoaderClass

jdk中classLoader默认设计模式:

    自低向上检查类是否加载,自顶向下尝试加载类

bootstrap classloader  rt.jar

extension classloader   java_home /lib/ext/*.jar

app classloader   classpath下

custom classloader    自定义路径    



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值