ClassLoader(类加载器)

Java源代码被编译器编译成.class的字节码文件。然后由我们得ClassLoader负责将这些class文件给加载到JVM中去执行。
JVM中提供了三层的ClassLoader:

  • BootstrapClassLoader:主要负责加载核心的类库(java.lang.*等),构造ExtClassLoader和AppClassLoader。
  • ExtClassLoader:主要负责加载 jre/lib/ext 目录下的扩展的jar。
  • AppClassLoader:主要负责加载应用程序的主函数类。

双亲委派机制

双亲委派机制图解

首先会在AppClassLoader中检查是否加载过,如果有那就无需再加载了。如果没有,那么会拿到父加载器,然后调用父加载器的loadClass方法。父类中同理也会先检查自己是否已经加载过,如果没有再往上。注意这个类似递归的过程,直到到达Bootstrap classLoader之前,都是在检查是否加载过,并不会选择自己去加载。直到BootstrapClassLoader,已经没有父加载器了,这时候开始考虑自己是否能加载了,如果自己无法加载,会下沉到子加载器去加载,一直到最底层,如果没有任何加载器能加载,就会抛出ClassNotFoundException

类加载机制

Last modification:March 21st, 2021 at 10:03 pm
我从来都不喜欢钱,我也没碰过钱,我对钱没兴趣