启动类加载器(Bootstrap ClassLoader):
由C/C++实现,负责加载<JAVA_HOME>\jre\lib目录下特定名称的jar包到虚拟机内存中。在JVM启动时,通过Bootstrap ClassLoader加载rt.jar,并初始化sun.misc.Launcher从而创建Extension ClassLoader和Application ClassLoader的实例.
扩展类加载器(Extension Classloader):
只有一个实例,由sun.misc.Launcher$ExtClassLoader实现,负责加载<JAVA_HOME>\lib\ext目录下或是被系统属性java.ext.dirs所指定路径目录下的所有类库。
应用程序类加载器(Application ClassLoader):
只有一个实例,由sun.misc.Launcher$AppClassLoader实现,负责加载系统环境变量ClassPath或者系统属性java.class.path制定目录下的所有类库,如果应用程序中没有定义自己的加载器,则该加载器也就是默认的类加载器.该加载器可以通过java.lang.ClassLoader.getSystemClassLoader获取.
自定义类加载器: java编写,用户自定义的类加载器,可加载指定路径的class文件
双亲委派机制:
如图所示,当一个类加载器收到一个类加载的请求,它首先会将该请求委派给父类加载器去加载,每一个层次的类加载器都是如此,因此所有的类加载请求最终都应该被传入到顶层的启动类加载器(Bootstrap ClassLoader)中,只有当父类加载器反馈无法完成这个列的加载请求时(它的搜索范围内不存在这个类),子类加载器才尝试加载。简单来说,就是当加载一个类的时候,向上递归调用。
作用:为了安全! 防止重复加载同一个class,通过委托向上 询问,如果已经加载过了,那么就不需要再加载了。 保证核心的class不会被篡改,通过委托的方式,保证不会被篡改。

本文详细介绍了Java的类加载器,包括启动类加载器、扩展类加载器和应用程序类加载器,以及自定义类加载器的工作原理。重点阐述了双亲委派机制,该机制确保类的安全加载,防止重复加载和核心类被篡改。

被折叠的 条评论
为什么被折叠?



