一、为什么要用这种模型
保证相同的字节码文件不被重复加载
二、利用双亲委派模型加载类的过程
摘自参考文献1.pngjava.lang.ClassLoader.getClassLoader()代码片段
protected synchronized Class<?> loadClass(String name,boolean resolve){
// 看自己有没有加载过该类
Class c=findLoadedClass(name);
// 未加载过
if(c==null){
try{
// 有父亲:则将请求委派给父亲完成
if(parent!=null){
c=parent.loadClass(name,false);
}esle{
// 没父亲:默认使用启动类加载器作为父加载器
c=findBootstrapClassOrNull(name);
}
}catch(ClassNotFoundException e){
// 父类加载器抛出ClassNotFoundException,说明父类加载器无法完成加载请求
}
if(c==null){
// 父类加载器无法加载时:调用自身的findClass()来加载
c=findClass(name);
}
}else{
// 加载过
if(resolve){
resolveClass(c);
}
}
return c;
}
代码逻辑.png这是一个递归调用过程。
若“某类加载器”收到某个类加载请求:
三、JVM中如何判断两个类是相同的
- 类名相同
- 由同一个类加载器加载
网友评论