1. 类加载器的父亲委托机制(双亲委托机制)

  • 在父亲委托机制中,各个加载器按照父子关系形成了树形结构,除了根类加载器之外(根类加载器没有父加载器),其余的类加载器都有且只有一个父加载器
  • 当一个加载器加载一个类时,会递归的交给父加载器进行加载。直到递归到最顶层,然后自顶向下进行判断,如果一旦有一个加载器能够成功加载,那么加载成功结束
  • 它是自底向上检查类是否以及加载,然后自顶向下尝试加载该类

14.类加载器双亲委托机制详解

2. 各个类加载器的加载的类

1. BootStrap ClassLoader (启动类加载器)

  1. Load JRE\lib\rt.jar 或者-Xbootclasspath 选项指定的jar包
  2. $JAVA_HOME 中jre/lib/rt.jar 里所有的class,由c++实现,不是ClassLoader子类

2. Extension ClassLoader

  1. Load JRE\lib\ext\*.jar 或-Djava.ext.dirs 指定目录下的jar包
  2. 负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME 中jre/lib/*.jar 或-Djava.ext.dirs 指定目录下的jar包

3. App ClassLoader

  1. Load CLASSPATH 或 -Djava.class.path 所指定的目录下的类和jar包
  2. 负责加载classpath 中指定的jar包及目录中class
  3. 加载工程项目中的class文件

4. Custom ClassLoader

通过java.lang.ClassLoader 的 子类自定义加载class

在oracle的hotspot虚拟机中 采用的是标准的父亲委托机制,但是在其他虚拟机实现中可能不是

  • 若有一个类加载器能够成功加载Test类,那么这个类加载器被称为定义类加载器,所有能成功返回Class对象引用的类加载器(包括定义类加载器)都被称为初始类加载器

3. 加载器分析

  1. 如果对应的类加载器对应的是启动类加载器,那么返回null

14.类加载器双亲委托机制详解

14.类加载器双亲委托机制详解

相关文章:

  • 2021-06-03
  • 2021-07-01
  • 2021-08-30
  • 2022-12-23
  • 2021-06-24
  • 2021-08-26
  • 2021-04-24
  • 2021-12-30
猜你喜欢
  • 2022-12-23
  • 2021-06-28
  • 2021-05-08
  • 2022-12-23
  • 2022-12-23
  • 2021-08-02
  • 2021-07-15
相关资源
相似解决方案