开发喵星球

JVM中类加载器双亲委派模型机制?

Java虚拟机(JVM)中的类加载器采用了双亲委派模型(Delegation Model)。这是一种层次化的类加载机制,主要分为以下几个概念:

  1. 启动类加载器(Bootstrap Class Loader):

    • 是最顶层的类加载器,负责加载Java核心类库(如java.lang包下的类)。
    • 由C++实现,一般无法直接在Java代码中获取对其的引用。
  2. 扩展类加载器(Extension Class Loader):

    • 是启动类加载器的子类,负责加载java.ext.dirs系统属性指定的目录中的类库。
    • 通过sun.misc.Launcher$ExtClassLoader实现,可以通过Java代码获取引用。
  3. 应用程序类加载器(Application Class Loader):

    • 也称为系统类加载器,负责加载应用程序classpath路径上的类库。
    • 是扩展类加载器的子类,通过sun.misc.Launcher$AppClassLoader实现,可以通过Java代码获取引用。
  4. 自定义类加载器:

    • 继承ClassLoader类的用户自定义类加载器,可以加载用户自定义路径上的类。

双亲委派模型的工作流程:

  1. 当一个类加载器收到加载类的请求时,首先会检查自己是否已经加载过这个类。如果已经加载过,直接返回该类的Class对象。
  2. 如果类未加载,该加载器会将加载任务委派给其父类加载器,让父类加载器去尝试加载。这样的递归委派过程一直向上,直到达到启动类加载器。
  3. 如果启动类加载器无法加载该类,每个类加载器会尝试自己加载。如果加载成功,返回该类的Class对象;如果失败,再将加载任务委派给子类加载器。

优势和原理:

为何使用双亲委派模型:

Proudly powered by WordPress