JVM:类的加载机制

一、详细知识

  1. 这篇文章是我学习类加载时看的文章,讲的很详细,很用心

二、 知识总结

1. 加载阶段
  1. 类的生命周期
加载
验证
准备
解析
初始化
卸载

其中验证、准备、解析属于连接阶段。

  1. 类的加载时间(5种)
    (1) 被 new 时加载
    (2) 子类被调用(会先加父类)
    (3) 访问类的静态变量(调用或者赋值)
    (4) 调用类的静态方法
    (5) 反射调用

  2. 类的加载器分为三种
    (1) 根加载器(bootstrap class loader)使用C++写的,用来加载lib/rt.jar下面的核心类
    (2) 扩展加载器(extensions class loader),主要加载Java的扩展Class
    (3)系统类加载器(system class loader),如果没用用户自定义,我们平时写的Class就是这个加载器加载的

  3. 加载器加载机制三种
    (1) 全盘加载:这个加载器加载的类所依赖或者引入的所有类都需要由这个加载器进行加载
    (2) 双亲加载:当加载一个类时,这个加载器会先让它的父加载器加载,不行,自己才会去加载
    (3) 缓存加载:当加载一个类时,先判断这个类是否在缓存区,在的话,不进行二次加载

  4. 注意:类被不同的加载器加载会生成不同的类对象(类对象的名字是由全类名+加载器名字生产),加载器将类的类型信息放在方法区,将类对象放在Java堆中。

2.链接阶段
  1. 验证 分为四种验证 :
    (1) 文件格式验证:主要校验类的文件格式
    (2) 元数据验证: 主要对字节码文件进行语义分析,是否符合Java语法规范
    (3) 字节码验证:主要是对元数据验证之后的方法体进行验证
    (4) 符号引用验证: 主要是确保符号引用是否存在

  2. 准备:为类的静态变量分配内存

  3. 解析:将符号引用改为直接引用

3.初始化: 为类的静态变量赋值
4.卸载
  1. 执行System.exit()正常结束或者出现异常时调用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贝多芬也爱敲代码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值