BootStrap ClassLoader 启动类加载器 负责jdk的核心类库
Extension ClassLoader 扩展类加载器 负责加载jdk扩展类库
App ClassLoader 系统类加载器 负责加载classpath下的所有class
自定义的ClassLoader类和Extension ClassLoader, App ClassLoader都继承自java.lang.ClassLoader, BootStarp Class Loader不是继承ClassLoader,是由C++ 写在jvm中。
类加载原理:使用的是双亲委托模型来搜索类,每个ClassLoader都有一个父类加载器的引用(不是继承),BootStrap ClassLoader没有父类加载器。当一个Class Loader实例加载类时,在亲自搜索之前委托给父类加载器。所以加载时先由BootStrap ClassLoader加载,如果没有加载到,把任务转给Extension ClassLoader类加载器,如果也没有加载到,就转给App ClassLoader, 如果还是没有,就返回给委托发起者,如果发起者也没有加载到,则抛出ClassNotFoundException, 否则,加载到内存中,返回该类在内存中的实例对象。
使用双亲委托模型可以避免类被重复加载。
JVM在判定两个类是否相同时,不仅判断是否类名相同,还要判断是否由同一个类加载器加载的。
自定义ClassLoader加载器,继承ClassLoader类,实现findClass(String name) 方法。
ClassLoad作用,将class文件加载到jvm中,能够动态的加载。