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)
怎么查看和分析堆内存?共源 1
Java
CPU 满了怎么排查?共源 1
并发Java
哪些情况会发生栈溢出?共源 1
Java JVM并发Java
常用的 JVM 排查工具有哪些?共源 1
Java JVM并发Java
JVM 什么时候启动?共源 1
Java JVMJava
元信息
审核状态: active
关联来源: 1
来源面经题(0)
这道题目前没有手动沉淀的面经题来源。
来源(1)
Java八股(JVM).md
knowledge_noteQuestion 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应用可能有同名类但实现不同,需要通过各自的类加载器实现隔离。