跳转至

✅ Java 双亲委派模型

✅ 什么是双亲委派模型?

类加载器在加载类时,总是先将请求交给父加载器,只有在父加载器无法加载的情况下,子加载器才会尝试加载。


✅ 双亲委派模型的核心结构:

          [BootstrapClassLoader]
                     ↑
           [ExtClassLoader]
                     ↑
           [AppClassLoader]
                     ↑
      [自定义ClassLoader(如 Tomcat 的 WebAppClassLoader)]

✅ 双亲委派的两个主要作用:

🎯 1. 防止 Java 核心类被篡改(安全性)

  • 比如你创建了一个 java.lang.String 类,试图替换系统类;
  • 如果没有双亲委派,用户类加载器可能会优先加载你写的“假 String”;
  • 有了双亲委派,请求会先给 BootstrapClassLoader,它会加载真实的 rt.jar 里的 String 类;
  • ✅ 保证了 Java 核心类不能被用户代码替换,增强 JVM 安全性。

🎯 2. 避免类被重复加载(类唯一性)

  • JVM 中,一个类只能由某个类加载器加载一次;
  • 如果子加载器重复加载相同类,会造成 LinkageError 或内存浪费;
  • 通过双亲委派,父加载器已加载的类,子加载器直接复用;
  • ✅ 确保类全局唯一性,构建统一命名空间。

✅ 总结一句话:

双亲委派模型的核心目标是:

  • ✅ 保证 Java 核心类不被用户篡改;
  • ✅ 保证类不会被重复加载,提升性能与一致性。

📌 拓展(可选):

  • 可通过自定义类加载器打破双亲委派实现类隔离;
  • 比如:Tomcat、Spring Boot 的插件机制。
回到页面顶部