有哪些类加载器?分别有什么作用?

  1. 启动类加载器(Bootstrap ClassLoader):这个类加载器是由 C++ 语言实现的,是虚拟机自身的一部分。负责将存在 \lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的类库加载到虚拟机内存中。启动内加载器无法被 Java 程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给启动类加载器,直接使用 null 即可;

  2. 其他类加载器:由 Java 语言实现,独立于虚拟机外部,并且全都继承自抽象类 java.lang.ClassLoader。如扩展类加载器和应用程序类加载器:

(1)扩展类加载器(Extension ClassLoader):这个类加载器由sun.misc.Launcher$ExtClassLoader 实现,它负责加载\lib\ext目录中的,或者被 java.ext.dirs 系统变量所指定的路径中的所有类库,开发者可以直接使用扩展类加载器。

(2)应用程序类加载器 (Application ClassLoader):这个类加载器由 sun.misc.Launcher$AppClassLoder 实现。由于个类加载器是 ClassLoader 中的 getSystemClassLoader() 方法的返回值,所以一般也称之为系统类加载器。它负责加载用户路径(ClassPath)所指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。

发表评论