技术文摘
Java 史上三次破坏双亲委派模型分别是哪些?
Java 史上三次破坏双亲委派模型分别是哪些?
在 Java 的发展历程中,双亲委派模型是类加载机制的重要原则,但也存在三次被破坏的情况。
第一次破坏发生在 JNDI 服务中。JNDI 是 Java 命名和目录接口,其目的是为了整合不同的命名服务和目录服务。由于 JNDI 中的代码需要调用由独立厂商实现并部署在应用程序的 ClassPath 下的代码,而启动类加载器无法加载这些类,所以不得不破坏双亲委派模型,使用线程上下文类加载器来加载。
第二次破坏是为了支持热部署。热部署要求在运行时重新加载修改后的类,而传统的双亲委派模型无法满足这一需求。在这种情况下,通过自定义类加载器来实现类的重新加载,从而打破了双亲委派模型的限制。
第三次破坏则与 OSGi 框架有关。OSGi 是一个动态化模块化的 Java 框架。在 OSGi 中,每个模块(Bundle)都有自己独立的类加载器,并且这些类加载器之间的关系不再是传统的双亲委派模型。模块之间的类共享和隔离通过特定的规则和机制来实现,这再次打破了双亲委派模型。
这些对双亲委派模型的破坏并非是对其原则的否定,而是在特定场景下为了满足更复杂的需求而做出的灵活调整。它们展示了 Java 技术在不断发展和应对新挑战时的创新和适应能力。
理解这三次破坏,有助于我们更深入地理解 Java 类加载机制的本质,以及在不同场景下如何灵活运用和优化类加载策略,从而更好地开发和优化 Java 应用程序。也让我们看到 Java 作为一种成熟的编程语言,在保持稳定性和兼容性的基础上,不断演进和完善自身的机制,以适应日益复杂和多样化的应用需求。
TAGS: Java 技术 Java 发展历程 Java 双亲委派模型 Java 核心原理
- ElementUI排序后删除按钮异常:点击删除按钮为何随机删除元素
- 用缩进优化JavaScript代码获取路径层级的方法
- 优化JavaScript代码 用更简洁方式对对象数组排序的方法
- 浏览器调试时点击事件消失的解决方法
- CSS Sticky 粘性布局在水平滚动后失效如何解决
- GitHub 是否为开源项目
- Vue3访问HashMap中值的方法
- GitHub 网站是否开源
- Vue3获取后端传回HashMap值的方法
- 我不喜欢使用 elm-css 的原因
- TypeScript 中的模块声明
- 构建专属JavaScript兼容语言:精通编译器设计
- HTTPS环境中a标签下载HTTP资源失败如何解决
- 正则表达式匹配HTML多行文本避免只捕获最后一行的方法
- 在 localStorage 中存储用户数据是否安全