类加载器

https://crowhawk.github.io/2017/08/21/jvm_6/

类的加载器:每个类和对应的类加载器在虚拟机中都具有唯一性,也就是说不同的类加载器根据同个class文件加载出来的两个个类.算不同的两个类.

加载机制:双亲委托机制:在类加载器中只分成两种类加载器.一种是由c++写的BootstrapClassload.和其他的由java语言写的类加载器.全都继承与ClassLoad类

如果由开发人员来划分类别:

1:启动类加载器Bootstrap Classload.无法用java代码直接引用.需要吧加载请求委托给引导类加载器.直接用null来代替


2:扩展类加载器:Extension Classload. 开发者可以直接使用

3:应用程序类加载器:Application Classload(系统类加载器).有ClassLoad中的getSystemClassLoad的返回值.负责加载用户类路径上的类库.一般默认的加载器就是这个

双亲委托加载过程:当类加载器接到一个类的加载请求,先把委托给父类加载器去完成.一层一层往上.如果最上层的加载器表示加载不了.则返回给下一级去加载.(bootStrap Classload不是Extension Classload的父类加载器.他的父类加载器是null.当父类加载器为null时.会用启动类加载器)

破坏双亲委托加载机制:

并不是所有的加载都是双亲委托加载机制的;

1:在这个机制之前出现的有一些是用自定义的加载器加载的.(所以只能加一个方法findClass().这个方法唯一的作用就是地调用loadClass())

2:越基础的类由越基础的加载器加载.如果基础类需要调用用户代码时.JNDI(对资源进行集中管理和查找)  解决(线程上下文类加载器)如果创建线程是,还没加载,会调用父类加载器加载.如果在应用程序的全局范围内都没有设置过的话,那这个类加载器默认为Application Classload

3:对动态化程序的追求:不停机更新:基本都在平级类加载器中查找

你可能感兴趣的:(类加载器)