双亲委派模型的工作原理与优势
请解释Java双亲委派模型的工作原理、为什么要使用双亲委派?以及如何破坏双亲委派模型?
回答
专业代码师
双亲委派模型:
- 除Bootstrap ClassLoader外,每个类加载器都有父加载器。
- 加载类时先委派给父加载器,若父加载器无法加载,才由自己加载。
- 层次:Bootstrap(rt.jar)→ Extension(ext/*.jar)→ Application(classpath)。
优势:
- 安全性:防止核心API被篡改,如java.lang.Object始终由Bootstrap加载。
- 避免重复加载:父加载器已加载的类子加载器不再重复加载。
- 保证类唯一性:同一个类由相同加载器加载才视为相同。
破坏方式:
- SPI机制(JDBC等):父加载器加载子加载器的类,覆盖loadClass方法。
- Tomcat:每个WebApp有独立加载器,优先加载/WEB-INF/下的类。
- 热部署:创建新的类加载器加载修改后的类,旧类交由GC回收。