类加载机制+双亲委派机制(通俗易懂版)

1,类加载机制

一个类从加载到使用到卸载一共经过了5个步骤:
加载 -> 连接 -> 初始化

其中连接分为验证,准备,解析三个阶段

1,加载

那么什么时候会将.class文件加载到jvm中?
就是在你使用这个类的时候。

验证,准备,解析

2,验证

验证是对class文件进行校验,判断它是否符合指定的规范,不然你把.class文件丢给JVM,结果JVM根本不认识就很离谱。

3,准备

类变量(成员变量),静态变量分配内存空间,并且设置默认值,数值类型就是0,布尔类型就是false,其他引用类型就是null

4,解析

把符号引用替换为直接引用。
这个我是这么理解的,符号引用就是 int num=0,这个num(变量名)就是符号引用,那么jvm会将这个num解析成指向内存中这个变量的指针,这个指针就是直接引用;
这里只是拿类变量打个比方,他还会将方法

5,初始化

初始化就是将之前分配了默认值的变量,设置变量值。

2,双亲委派机制

类加载是通过加载器来实现的,那么有哪几种加载器呢?

(1)启动类加载器

Bootstrap ClassLoader,加载jdk中lib目录下的核心类;

(2)类扩展加载器

Extension ClassLoader,加载jdk中lib/ext目录的类;

(3)应用程序加载器

Application ClassLoader,加载自己写的class类;

(4)自定义加载器

自己实现,根据自己的需求自定义加载类;

(5)双亲委派机制

jvm的类加载器是有亲子结构的,会先从上到下查找需要加载的类,如果在上面找到了,那么会用父加载器来完成加载,如果父类没找到会去子类加载器接着找,知道最后,如果都没有就会报错:ClassNotFoundException
这就是所谓的双亲委派模型:先找父亲去加载,不行的话再由儿子来加载
这样的话,可以避免多层级的加载器结构重复加载某些类。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值