双亲委派模型
作者:bin类加载器主要又三种:
我们还可以自定义自己的类加载器,下面为类加载器双亲委派模型
双亲委派的工作过程是:
loadClass()方法:
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { synchronized (getClassLoadingLock(name)) { // 首先,检查该类是否已经加载 Class<?> c = findLoadedClass(name); if (c == null) { long t0 = System.nanoTime(); try { if (parent != null) { c = parent.loadClass(name, false); } else { c = findBootstrapClassOrNull(name); } } catch (ClassNotFoundException e) { //如果从非空父类加载器中找不到类,则抛出ClassNotFoundException } if (c == null) { // 如果仍然找不到,请调用findClass以便找到该类 long t1 = System.nanoTime(); c = findClass(name); // 这是定义类加载器;记录统计数据 sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0); sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1); sun.misc.PerfCounter.getFindClasses().increment(); } } if (resolve) { //链接 resolveClass(c); } return c; } }