JVM学习笔记5—类加载器(classloader)

class装载验证流程

1 加载

· 取得类的二进制流,转为方法区数据结构,在堆中生成相应的java.lang.Class对象

2 链接

(1)验证(文件格式验证,元数据验证,字节码验证,符号引用验证)

保证Claas流的格式是正确的,防止被恶意替换

(2)准备

分配内存,并为类设置初始值(在方法区中)
注意 public static int a=1,在准备阶段,v=0,而不是1

(3)解析

符号引用替换为直接引用,因为在编译时java类并不知道引用类的实际地址,只能通过符号引用来代替,而在类装载的过程时,此时可以通过JVM知道所引用的类 的实际内存地址,转化为了直接地址引用,例如 cn.edu.ustc.car类引用了cn.edu.ustc.tools这个类,在car这个类编译的时候,其并不知道tools类的实际内存 地址,只能用符号引用表示,而在car类装载的时候,可以通过JVM得tools类的实际内存地址,此时转化为直接地址引用

3 初始化

执行类构造器<.clinit> 准备过程中的注意 那块a此时被初试化为1,clinit是线程安全的,在调用子类clinit之前必须保证父类的clinit已经被调用了

classloader的定义

classloader是一个抽象类
classloader的实例将读入java字节码,并将类装载到JVM中
classloader是可以直接定义的
classloader辅助类加载过程中的加载阶段

classloader默认设计模式(父委托机制)

classloader的架构
共分为四层从上往下是: 根加载器--->拓展加载器---->系统加载器----->自定义加载器
所谓的父委托机制就是,一个类优先由上层加载器进行加载。
例如有一个类 people需要加载,JVM首先会看根加载器能不能加载,不能的话再看拓展加载器能不能加载,再不能的话,在看系统加载器能不能加载,再不能的话就看用户自定义的加载器能不能加载,一旦上层的加载器能加载,就不判断下层的加载器能不能加载了,这就是所谓的父委托机制


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值