-
引导类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,比如rt.jar、charsets.jar等,java中无法获取因为它是由c++编写的。
-
扩展了加载器:负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包。
-
应用程序类加载器:负责加载ClassPath路径下的类包,主要就是加载你自己写的那。
-
自定义加载器:负责加载用户自定义路径下的类包
双亲委派加载机制
-
首先,检查一下指定名称的类是否已经加载过,如果加载过了,就不需要再加载,直接返回。
-
如果此类没有加载过,那么,再判断一下是否有父加载器;如果有父加载器,则由父加载器加载(即调用parent.loadClass(name, false);).或者是调用bootstrap类加载器来加载。
-
如果父加载器及bootstrap类加载器都没有找到指定的类,那么调用当前类加载器的findClass方法来完成类加载。
为什么要设计双亲委派机制?
-
沙箱安全机制:自己写的java.lang.String.class类不会被加载,这样便可以防止核心API库被随意篡改
-
避免类的重复加载:当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次,保证被加载类的唯一性