Java类加载器家族揭秘:揭秘Java中类加载器的数量与作用
在Java编程语言中,类加载器是一个至关重要的概念,它负责将类文件加载到JVM中。那么,Java中有多少个类加载器呢?本文将深入解析Java中常见的类加载器数量及其作用。
Java中常见的类加载器数量
1. Bootstrapping ClassLoader(启动类加载器)
启动类加载器是Java中最顶层的类加载器,负责加载存放在JDK的lib
目录(在JDK 9中是jdk/lib
)中的,或被-Xbootclasspath:
参数指定的路径中的,并且是JVM能够识别的类库。启动类加载器是用原生代码编写的,没有继承自java.lang.ClassLoader
类。
2. Extension ClassLoader(扩展类加载器)
扩展类加载器负责加载lib/ext
目录中的,或由系统变量java.ext.dirs
指定路径中的所有类库。它由sun.misc.Launcher$ExtClassLoader实现,继承自java.lang.ClassLoader
类。
3. Application ClassLoader(应用程序类加载器)
应用程序类加载器负责加载用户类路径(Classpath)上的所有类库。它由sun.misc.Launcher$AppClassLoader实现,继承自java.lang.ClassLoader
类。
4. 用户自定义类加载器
用户自定义类加载器是由用户自己编写的类加载器,用于加载特定来源的类文件。这些类加载器通常继承自java.lang.ClassLoader
类,并重写其中的findClass
方法来实现自定义的类加载逻辑。
5. 系统类加载器
系统类加载器负责加载用户类路径(Classpath)上的所有类库。它与应用程序类加载器类似,但它们在类加载器层次结构中的位置不同。系统类加载器由sun.misc.Launcher$ClassLoader实现,继承自java.lang.ClassLoader
类。
总结
Java中常见的类加载器有5个,分别是启动类加载器、扩展类加载器、应用程序类加载器、用户自定义类加载器和系统类加载器。每个类加载器都有其特定的作用和职责,共同构成了Java类加载器家族。理解这些类加载器的工作原理和作用,对于深入理解Java虚拟机的工作机制具有重要意义。