技术文摘
Java 史上三次破坏双亲委派模型分别是哪些?
Java 史上三次破坏双亲委派模型分别是哪些?
在 Java 的发展历程中,双亲委派模型是类加载机制的重要原则,但也存在三次被破坏的情况。
第一次破坏发生在 JNDI 服务中。JNDI 是 Java 命名和目录接口,其目的是为了整合不同的命名服务和目录服务。由于 JNDI 中的代码需要调用由独立厂商实现并部署在应用程序的 ClassPath 下的代码,而启动类加载器无法加载这些类,所以不得不破坏双亲委派模型,使用线程上下文类加载器来加载。
第二次破坏是为了支持热部署。热部署要求在运行时重新加载修改后的类,而传统的双亲委派模型无法满足这一需求。在这种情况下,通过自定义类加载器来实现类的重新加载,从而打破了双亲委派模型的限制。
第三次破坏则与 OSGi 框架有关。OSGi 是一个动态化模块化的 Java 框架。在 OSGi 中,每个模块(Bundle)都有自己独立的类加载器,并且这些类加载器之间的关系不再是传统的双亲委派模型。模块之间的类共享和隔离通过特定的规则和机制来实现,这再次打破了双亲委派模型。
这些对双亲委派模型的破坏并非是对其原则的否定,而是在特定场景下为了满足更复杂的需求而做出的灵活调整。它们展示了 Java 技术在不断发展和应对新挑战时的创新和适应能力。
理解这三次破坏,有助于我们更深入地理解 Java 类加载机制的本质,以及在不同场景下如何灵活运用和优化类加载策略,从而更好地开发和优化 Java 应用程序。也让我们看到 Java 作为一种成熟的编程语言,在保持稳定性和兼容性的基础上,不断演进和完善自身的机制,以适应日益复杂和多样化的应用需求。
TAGS: Java 技术 Java 发展历程 Java 双亲委派模型 Java 核心原理
- SVG中圆形边框宽度为何不一致
- 页面关闭时怎样自动保存内容为草稿
- CSS实现表格横向排列的优化方法
- JavaScript循环生成多个FullCalendar事件的方法
- Vue中动态清除keep-alive缓存指定组件的方法
- 使用组件和选项卡组件展示多个相同组件实例并传递不同参数的方法
- 头部和底部HTML引入现乱码,编码不一致问题该如何解决
- 怎样使横向排列的 DIV 高度保持一致
- initial-scale在PC端Chrome中不生效但模拟移动端时生效的原因
- 父容器内多个 DIV 如何实现横向排列且高度一致
- 打造这种斜线效果该从何处着手
- JavaScript定时器清除失效与叠加加速问题的解决方法
- Echarts地图展示单个省份遇“Map jilin not exists”错误的解决方法
- React应用里script标签相对路径为何被解析为根路径请求及解决办法
- 在 flex 布局里添加 `flex: 1;` 和 `width: 0;` 能保留元素空间的原因