Java虚拟机——Java模块化系统

  • 在JDK 9中引入了Java模块化系统(取代了传统基于类路径的方式)
  • 实现模块化的关键目标:可配置的封装隔离机制
  • 模块是一组相关包的集合,其中描述了该模块的名称、依赖关系和导出的包等信息。 它是一个封闭单元,可以限制对外部其他模块或类的访问。

什么是可配置封装隔离机制

  • 是一种软件设计模式,它通过将系统中的相关组件(类、函数、变量等)封装到一个独立的容器中,实现组件之间的逻辑隔离。 这个容器可以被动态地配置和修改,实现不同的功能需求。

可配置封装隔离机制解决了什么?

  1. 解决了基于类路径来查找依赖的可靠性问题。 模块化进行封装后,模块可以声明对其他模块的显示依赖,这样Java虚拟机在启动时就可以验证依赖关系是否完备。
  2. 解决了类路径上跨JAR文件的public类型的可访问性问题。 public不意味程序所有地方的代码都可以随意访问它们,模块提供了更精细的可访问性控制。(必须声明哪一些public类型可以被其他哪一些模块访问)

模块化具有兼容性

  • Java应用即使依然使用传统的类路径,但是还是可以在JDK9中进行运行。
  • 某个类库到底是模块还是传统的JAR包,取决于它存放在哪条路径上。

模块化下的类加载器

  • JDK 9没有动摇三层类加载架构和双亲委派模型
  • 但是为了模块化的顺利施行,模块化下的类加载器发生了一些变动。
  1. 拓展类加载器被平台类加载器代替
  • 整个JDK都基于模块化进行构建,其中的Java类库以天然满足拓展的需求,自然就不需要拓展类加载器了。
  1. 平台类加载器和应用程序类加载的继承关系变化了
  • 它们都不再派生自java.net.URLClassLoader,现在三个类加载器都全部继承于jdk.internal.loader.BuiltinClassLoader。
  • BuiltinClassLoader中实现了新的模块化架构下类如何从模块中加载的逻辑, 以及模块中资源可访问性的问题。
  • 同时出现了BootClassLoader类,但是为了和之前的代码兼容,就算获取启动类加载器也会返回null来代替。

新的双亲委派模型

  • 模块化可以说是双亲委派模型的第四次破坏,它修改了部分的结构。
    在这里插入图片描述
  • 当平台类加载器收到请求的时候,不会立刻委派给父加载器。
  • 而是先判断该类是否能够归属到某一个系统模块中,如果可以找到这样的归属关系。
  • 那么就会优先委派给负责那个模块的加载器完成加载。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值