类加载机制与双亲委派机制简述

java程序运行之前会把编写的类装载到JVM中,分为加载、验证、准备、解析、初始化这五步:

  1. 加载,就是类加载器将类的.class文件的二进制读入到内存中,并且创建一个java.lang.Class对象。这个class对象提供了访问类中数据的接口。
  2. 验证,确保Class文件的字节流符合当前虚拟机的要求。
  3. 准备,给类变量分配内存,并设置初始值。
  4. 解析,把常量池中的符号引用换为直接引用。符号引用只是符合虚拟机规范的格式,直接引用才是指向目标的指针。
  5. 初始化,调用<client>方法给静态变量赋值,执行静态代码块。在此之前会先执行父类的<client>方法。如果类中没有静态变量或静态代码块,编译器可以不生成<client>方法。

上面的第一步,类的加载是通过类加载器来完成的。类加载器包括启动类加载器、扩展类加载器、应用程序类加载器和自定义类加载器。他们分别涵盖了各自路径下的类的加载。启动类加载属于最顶层的类加载器。他们的层次关系就是双亲委派模型。双亲委派机制就是当某个类加载器接到加载类的请求的时候,首先会将任务委托给父类加载器,直至顶层类加载器,如果顶层类加载器无法完成此任务时,才由自己去加载此类。这就保证了类的唯一性,因为不同的加载器加载出来的类是不同的。也保证了java的运行机制,因为假如你自己编写了一个java.lang.Object类想要用,这时java程序出现了两个不同的Object类,程序将会混乱。其实这时无论哪个类加载器都会把这个任务交给启动类加载器去完成,然后它加载自己路径下的Object类保证了java程序中只有一个Object类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值