类加载详解

1. 类加载全过程

加载-》链接-》初始化

2. 加载阶段

注意: 数组类不是通过 ClassLoader 创建的,而是 JVM 在需要的时候自动创建的,数组类通过getClassLoader()方法获取该数组的元素类型的 ClassLoader

3.链接阶段

3.1 验证阶段
3.2 准备阶段 

为类变量分配内存并设置类变量初始值的阶段,此时不会对实例变量进行初始化

3.3 解析阶段

虚拟机将常量池内的符号引用替换为直接引用

 4. 初始化

执行初始化方法 <clinit> ()

4.1 类进行初始化的情况
  1. 遇到 new、 getstaticputstatic 或 invokestatic(调用静态方法) 这 4 条字节码指令
  2. 使用 java.lang.reflect 包的方法对类进行反射调用
  3. 初始化该类的子类
  4. 虚拟机启动时会初始化主类(包含main方法的类)
  5. 当一个接口中定义了 被 default 关键字修饰的接口方法时,如果有这个接口的实现类发生了初始化,那该接口要在其之前被初始化

5.类卸载

  1. 该类的所有的实例对象都已被 GC
  2. 该类没有在任何地方被引用
  3. 该类的类加载器的实例已被 GC

在 JVM 生命周期内,由 jvm 自带的类加载器加载的类是不会被卸载的。但是用户自定义的类加载器加载的类是可能被卸载的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值