双亲委派模型

双亲委派模型

从Java虚拟机的角度来讲,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言来实现,是虚拟机自身的一部分;另外一种就是其他所有的类加载器,这些类加载器都是有Java语言实现的,独立于虚拟机外部,并且全部继承自抽象类java.lang.ClassLoader

​ congJava开发人员的角度来讲,类加载器还可以划分的更加细致一些,绝大部分Java语言使用到下面3种系统提供的类加载器。

  • 启动器类加载器(Bootstrap ClassLoader):前面已经介绍过,这个类加载器负责将放在<JAVA_HOME>\lin目录中的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的(济南文件名识别,如rt.jar,名字不符合的类库即使在lib文件目录中也不会被加载到虚拟机内存中。启动类加载器无法被Java程序直接应用,用户在编写自定义类加载器时,如果需要把加载请求为派给引导类加载器,那直接使用null代替即可。
  • 拓展类加载器(Extension ClassLoader):这个加载器由sun.musc.Launcher$ExtClassLoader实现,他负责加载<JAVA_HOME>\lib\ext目录中的,或者被java.ext.dirs系统环境变量所指定的路径中的所有类库,开发者可以直接使用拓展类加载器。
  • 应用程序类加载器(Application ClassLoader):这个类加载器由sun.misc.Launcher$AppClassLoader实现,由于这个类加载器是ClassLoader中的getSystemClassLoader()方法的返回值,所以一般也将他称作系统类加载器。负责加载用户类路径上指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下就是这个应用程序中默认的类加载器。

破坏双亲委派模型

  • jdk1.2之前的loadClass()
  • 自身缺陷的需要基础类调用回用户的代码。
  • 热部署
posted @ 2019-03-13 18:07  随风而行-  阅读(121)  评论(0编辑  收藏  举报