【原創】Java基礎之ClassLoader類加載器簡介

classloader簡介

1 classloader層次結構(父子關係)

Bootstrap(ClassLoader)java

  • ExtClassLoader
    • AppClassLoader
      • XXXClassLoader

詳見代碼以下:app

sun.misc.Launcher
public Launcher() {

        Launcher.ExtClassLoader var1;

        try { var1 = Launcher.ExtClassLoader.getExtClassLoader(); } catch (IOException var10) { throw new InternalError("Could not create extension class loader", var10); } try { this.loader = Launcher.AppClassLoader.getAppClassLoader(var1); } catch (IOException var9) { throw new InternalError("Could not create application class loader", var9); }

2 classloader加載類過程

classloader在加載class時優先嚐試經過parent classloader加載,若是加載不到,才嘗試本身加載,即常說的「雙親委派」,this

而且若是一個class依賴其餘class,好比ClassA依賴ClassB,ClassB默認由ClassA的classloader來加載。spa

* <p> The methods and constructors of objects created by a class loader may
* reference other classes. To determine the class(es) referred to, the Java
* virtual machine invokes the {@link #loadClass <tt>loadClass</tt>} method of
* the class loader that originally created the class.code

詳見代碼以下:blog

java.lang.ClassLoader
protected Class<?> loadClass(String name, boolean resolve)

        throws ClassNotFoundException { synchronized (getClassLoadingLock(name)) { // First, check if the class has already been loaded  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 thrown if class not found // from the non-null parent class loader  } if (c == null) { // If still not found, then invoke findClass in order // to find the class. long t1 = System.nanoTime(); c = findClass(name); // this is the defining class loader; record the stats  sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0); sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1); sun.misc.PerfCounter.getFindClasses().increment(); } } if (resolve) { resolveClass(c); } return c; } }
相關文章
相關標籤/搜索