模型服务连接失败
Java
分类
Java JVM
难度
未设置
来源数
1
更新时间
2026/03/29 01:13

答案

**场景一:jdbc(父类加载器不能访问子类加载器加载类的代码)** 但是使用双亲委派也存在一定的局限性,在正常情况下,用户代码是依赖核心类库的,所以按照正常的双亲委派加载流程是没问题的; 但是在加载核心类库时,如果需要使用用户代码,双亲委派流程就无法满足; 比如在使用JDBC时, 利用DriverManager.getConnection获取连接时,就会存在这样的问题。 DriverManager是由根类加载器Bootstrap加载的,在加载DriverManager时,会执行其静态方法,加载初始驱动程序,也就是Driver接口的实现类;但是这些实现类基本都是第三方厂商提供的,根据双亲委派原则,第三方的类不可能被根类加载器加载。 **场景二:tomcat打破双亲委派机制(应用间的隔离)** tomcat中是吧war包放在webapp下,也就意味着一个tomcat可以运行多个web应用程序,那么假如两个web应用程序都有一个类,他们的全限定名一样,但是具体的实现不一样,此时如果按照传统的双亲委派机制加载就会产生冲突,因此tomcat为每个web应用创建了一个webappclassloader,重写了loadclass方法,优先加载当前应用目录下的类,从而实现web之间的隔离。而对于一些web间共享的类,直接按照传统的双亲委派机制加载即可。

相关题目(5)

元信息

审核状态: active
关联来源: 1

来源面经题(0)

这道题目前没有手动沉淀的面经题来源。

来源(1)

Java八股(JVM).md

knowledge_note
Question 8: 为什么要打破双亲委派机制? Source answer: **场景一:jdbc(父类加载器不能访问子类加载器加载类的代码)** 但是使用双亲委派也存在一定的局限性,在正常情况下,用户代码是依赖核心类库的,所以按照正常的双亲委派加载流程是没问题的; 但是在加载核心类库时,如果需要使用用户代码,双亲委派流程就无法满足; 比如在使用JDBC时, 利用DriverManager.getConnection获取连接时,就会存在这样的问题。 DriverManager是由根类加载器Bootstrap加载的,在加载DriverManager时,会执行其静态方法,加载初始驱动程序,也就是Driver接口的实现类;但是这些实现类基本都是第三方厂商提供的,根据双亲委派原则,第三方的类不可能被根类加载器加载。 **场景二:tomcat打破双亲委派机制(应用间的隔离)** tomcat中是吧war包放在webapp下,也就意味着一个tomcat可以运行多个web应用程序,那么假如两个web应用程序都有一个类,他们的全限定名一样,但是具体的实现不一样,此时如果按照传统的双亲委派机制加载就会产生冲突,因此tomcat为每个web应用创建了一个webappclassloader,重写了loadclass方法,优先加载当前应用目录下的类,从而实现web之间的隔离。而对于一些web间共享的类,直接按照传统的双亲委派机制加载即可。 Reviewed answer: 典型场景包括JDBC和Tomcat。JDBC中由Bootstrap加载的核心类需要使用第三方驱动实现;Tomcat中多个Web应用可能有同名类但实现不同,需要通过各自的类加载器实现隔离。