剑指Offer(JVM)——ClassLoader双亲委派机制

不同的类加载器对于类和路径的加载方式是有区别的,并且各自负责各自的部分使逻辑变得更加明确但是需要相互之间的协调工作才可以,如果没有一定的规则和方法就会造成问题,这时双亲委派机制就出现了,它能够使这些类加载器各司其职互不干扰。

首选先来看一下双清委派机制原理框图:
剑指Offer(JVM)——ClassLoader双亲委派机制
简要解释一下:

  1. 类被加载的时候自底向上执行考虑之前是否被加载过,如果被加载过直接返回否则进行第二步;
  2. 如果没有被加载过,交给AppClassLoader是Custom ClassLoader父类,查看AppClassLoader是否加载过;
  3. 一直到Bootstrap ClassLoader,如果都没有加载过就会自顶向下尝试去加载类;
  4. 首先看rt.jar或者看是否有自己导进来的jar包去进行加载;
  5. 如果没有的话就会依次按照所给路径,按照Bootstrap ClassLoader->ExtClassLoader->AppClassLoader->CustomClassLoader顺序去负责寻找对应所管的加载类的路径去加载对应的类文件;
  6. 类加载器是用同步锁锁上的,目的是防止多线程同步加载类。

来一下源码:
剑指Offer(JVM)——ClassLoader双亲委派机制