类加载器双亲委派模型图
双亲委派模型构成
- 启动类加载器
- 扩展类加载器
- 应用程序类加载器
- 自定义类加载器
双亲委派模型工作过程是
- 如果一个类加载器收到类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器完成。
- 每个类加载器都是如此,只有当父加载器在自己的搜索范围内找不到指定的类时(即ClassNotFoundException),子加载器才会尝试自己去加载。
为什么需要双亲委派模型?
- 如果没有双亲委派,那么用户是不是可以自己定义一个java.lang.Object的同名类、java.lang.String的同名类,等等,并把它放到ClassPath中,那么类之间的比较结果及类的唯一性将无法保证。因此,双亲委派模型可以防止内存中出现多份同样的字节码。