双亲委派是JVM类加载机制,目的是确保JVM中使用类的一致性(换言之就是确保公共类都是JVM定义的类)。首先我们看一下JVM启动到代码执行需要那些工作,首先需要启动JVM环境,也就是<JAVA_HOME>lib中定义的各种环境,其次可能需要扩展额外的依赖,也就是<JAVA_HOME>libext中的各种jar包,还有就是运行程序的代码。综上JVM加载器一共包括
启动类加载器(Bootstrap ClassLoader):由C++语言实现(针对HotSpot),负责将存放在<JAVA_HOME>lib目录或-Xbootclasspath参数指定的路径中的类库加载到内存中。
其他类加载器:由Java语言实现,继承自抽象类ClassLoader。
扩展类加载器(Extension ClassLoader):负责加载<JAVA_HOME>libext目录或java.ext.dirs系统变量指定的路径中的所有类库。
应用程序类加载器(Application ClassLoader)。负责加载用户类路径(classpath)上的指定类库,我们可以直接使用这个类加载器。一般情况,如果我们没有自定义类加载器默认就是用这个加载器。
双亲委派模型
双亲委派模型的过程是如果一个类加载器收到类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器完成。每个类加载器都是如此,只有当父加载器在自己的搜索范围内找不到指定的类时(即ClassNotFoundException),子加载器才会尝试自己去加载。
4)怎么打破双亲委派模型?
了解了类加载机制,在想打破就很好理解了,我们需要继承ClassLoader类,然后重写loadClass和findClass就可以了。
284

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



