面试题34:什么是双亲委派机制?

2023-05-09 21:40:25 浏览数 (2)

【JVM中存在3个默认的类加载器】

  • BootstrapClassLoader 根类加载器:它负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class。
  • ExtClassLoader 扩展类加载器:它负责加载JRE的扩展目录,lib/ext或者由java.ext.dirs系统属性指定的目录中的JAR包的类。
  • AppClassLoader 应用类加载器:它负责在JVM启动时加载来自Java命令的-classpath选项、java.class.path系统属性,或者CLASSPATH环境变量所指定的JAR包和类路径。

【3个类加载器之间的关系】

  • AppClassLoader的父加载器是ExtClassLoader;
  • ExtClassLoader的父加载器是BootstrapClassLoader。

【JVM中类的加载过程】

  • JVM在加载一个类时,会调用AppClassLoader的loadClass方法来加载这个类,不过在这个方法中,会先使用ExtClassLoader的loadClass方法来加载类,同样ExtClassLoader的loadClass方法中会先使用BootstrapClassLoader来加载类,如果BootstrapClassLoader加载到了就直接成功,如果BootstrapClassLoader没有加载到,那么ExtClassLoader就会自己尝试加载该类,如果没有加载到,那么则会由AppClassLoader来加载这个类。

所以,双亲委派——指得是,JVM在加载类时,会委派给ExtClassLoader和BootstrapClassLoader进行加载,如果没加载到才由自己进行加载。

0 人点赞