面试题-JVM-005. 双亲委派模型及其缺陷以及SPI和Tomcat的类加载

https://blog.csdn.net/jjclove...
https://blog.csdn.net/u013568...
https://zhuanlan.zhihu.com/p/...
什么是双亲委派模型?
双亲委派模型优势?
-1. 使得 Java 类随着它的类加载器一起具有一种带有优先级的层次关系,从而使得基础类得到统一
-2. 避免了多份同样字节码的加载
双亲委派模型缺陷?举例说明->SPI->怎么破?->使用线程上下文类加载器(ContextClassLoader)加载
tomcat的类加载机制?

这样就存在一个问题:SPI 的接口是 Java 核心库的一部分,是由BootstrapClassLoader加载的;SPI实现的Java类一般是由AppClassLoader来加载的。
BootstrapClassLoader是无法找到SPI的实现类的,因为它只加载Java的核心库。
它也不能代理给AppClassLoader,因为它是最顶层的类加载器。也就是说,双亲委派模型并不能解决这个问题

https://zhuanlan.zhihu.com/p/...

如何定义自已的类加载器?

1、继承java.lang.ClassLoader
2、重写父类的findClass方法
因为JDK已经在loadClass方法中帮我们实现了ClassLoader搜索类的算法,当在loadClass方法中搜索不到类时,loadClass方法就会调用findClass方法来搜索类,所以我们只需重写该方法即可。如没有特殊的要求,一般不建议重写loadClass搜索类的算法。

你可能感兴趣的:(面试问题jvm)