jvm类加载器
-
jvm自带的类加载器三种。
1. 启动类加载器,由C++实现。负责加载$JAVA_HOME/jre/lib/rt.jar
包。
2. 扩展类加载器,由JAVA实现。负责加载$JAVA_HOME/jre/lib/ext/*.jar
包,如javax包下的类。
3. 应用类加载器,由JAVA实现。负责加载当前应用classpath下的包,我们编写的类文件由其负责加载。 -
非jvm自带的类加载器。用户自定义类加载器。
-
类加载器的双亲委派机制。
当类加载器收到请求去加载某个类时,它首先不会自己去尝试加载这个类,而是将这个请求委托给父类去完成,每一层的类加载器都是如此。只有当父加载器在它的加载路径下没有找到所需的Class文件时,子加载器才会尝试自己去加载。好处是对java自带的类的保护,比如我们自定义了一个java.lang.String,但加载的还是java自带的String类。