类加载机制

类加载机制

一、类加载过程

类从加载到内存到卸载出内存,它的生命周期包括:

  1. 加载:根据类的全限定名生成二进制字节流,将静态字节流转化为方法区的运行时数据结构,生成一个class对象
  2. 验证:文件验证、元数据验证、字节码验证、符合引用验证
  3. 准备:将类变量(static修饰)进行初始赋值,如boolean初始值为false,int初始值为0,ref初始值为null,当类变量使用fianl修饰时,会同时赋上具体的值
  4. 解析:将符号引用替换为直接引用
  5. 初始化:准备阶段已经初始化赋值过了,初始化阶段会进行类变量赋值,以及静态代码块执行

二、类加载器

  • 根据类的全限定名生成二进制字节流是在虚拟机外执行,执行这个过程的模块就是类加载器
  • 两个类来自于同一个class文件,但是使用不同的类加载器加载,那么他们是不相等的

三、双亲委派

  • 类加载分为:
  1. 启动类加载器:<JAVA_HOME>/lib下的类库加载到虚拟机中
  2. 扩展类加载器:<JAVA_HOME>/lib/ext的类库加载到虚拟机中
  3. 应用类加载器:加载用户类路径上所指定的类库
  4. 自定义加载器:
    当一个类加载器收到类加载请求,首先不会自己加载,而是委派给上级类加载器,每个层次的加载器都是这样,最后加载请求会传递到启动类加载器,当父级加载器无法加载时,子类加载器才会尝试去加载

四、双亲委派的好处

  • 像一些系统类由启动类和扩展类加载,如果每个人写个类都可以用自己的加载器加载,那么系统会变的不安全,影响程序的运行

五、自定义加载器的好处

  • 热更新、热部署
  • 加载不同版本的jar,解决冲突
  • 对类进行加解密
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值