java classLoader的学习

classLoader即类加载器,顾名思义,作用是用来加载java类的。

   jvm中有三个加载器,分别是bootstrap ClassLoader,Extention ClassLoader,appClassLoader,前者依次是后者的parent,

但bootstrap由于是用C++写的,并不是以java类型存在的,所以打印出来是null。这三个加载器分工不同,bootstrap主要用来加载java的核心类,如java.*, javax.*下的类,以及jre中rt.jar和charset.jar。extention 则用来加载扩展类,如java.ext.dirs下的类。appclassLoader则用来加载应用类(classpath下)。

   加载模型是双亲委派模式。当用一个类加载器来加载某个类时,先用该类的父加载器来加载,没有加载到,再从该加载器的类路径中找需要加载的该类。(同一个类用不同的加载器加载进来,在jvm中是不同的类)。

  ClassLoader是一个抽象类,除了bootStrap,其他的classLoader都是其子类。其中的loadClass方法这样的:

1.该方法需要加锁,根据该classLoader类是否具有并行能力来决定加this还是特定className的锁。

2.先判断该类是否已经加载:findLoadedClass(className),若已加载,则直接返回(如不需要解析的话);

3.没加载,则判断该类的parent是否为null,为null,则用bootstrap来加载,不为null,则用parent的loadClass(className);

4.若父类未加载成功,则用该类的findClass来加载。

5.根据方法传进来的另一参数来决定是否解析。

 

java装载类是用的“全盘责任委托机制”。即当一个加载器加载某个类时,该类中所有依赖的,引用的类都由该加载器来加载(除非显式声明)。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值