JAVA类加载器优先级

2024-04-02  本文已影响0人  ButICare_b72d

Java虚拟机(JVM)中的类加载器通常分为以下三个层次,每个层次都有特定的加载责任和优先级:

Bootstrap ClassLoader(引导类加载器)

最顶层的加载器,由C/C++代码实现,嵌入在JVM内部,负责加载核心Java API类,比如java.lang.Object等位于rt.jar等核心库中的类。
它没有父类加载器,处于类加载器层次结构的顶端。
优先级最高,它首先尝试加载类,如果Bootstrap ClassLoader找不到相应类,则交给其子加载器。
Extension ClassLoader(扩展类加载器)

负责加载标准扩展目录<JAVA_HOME>/lib/ext或由java.ext.dirs系统属性所指定目录下的类库。
它是Bootstrap ClassLoader的子加载器,当Bootstrap ClassLoader不能处理时,请求会传递给Extension ClassLoader。
Application ClassLoader(系统类加载器/应用程序类加载器)

也被称为System ClassLoader,负责加载应用程序的类路径(CLASSPATH)上的类。
它是Extension ClassLoader的子加载器,主要加载用户自定义的类库和应用程序类。
当Extension ClassLoader无法加载类时,请求进一步向下传递给Application ClassLoader。
此外,用户还可以自定义类加载器,这些自定义类加载器通常作为Application ClassLoader的子类存在,拥有更低的优先级。

这三个类加载器之间遵循“双亲委派模型”,即当一个类加载器收到加载类的请求时,它首先将请求转发给父加载器,只有当父加载器无法加载时,子加载器才会尝试自己去加载。这样做的优势在于保证了类的唯一性以及核心Java API的稳定性。

上一篇下一篇

猜你喜欢

热点阅读