Skip to content

Jigsaw简介

Java 9最大的变化之一是引入了模块系统。Jigsaw是OpenJDK项目下的一个子项目,旨在为Java SE平台设计、实现一个标准的模块系统,并应用到该平台和JDK中。该项目由Java编程语言编译器小组赞助。

1. 模块化的背景

在JDK1.8中,无论程序很简单,JDK都需要加载两个jar包:tools.jar(17M),rt.jar(52M), 程序启动也就是JVM进程都需要加载接近70M的组件包。每次执行都会加载大量的程序类,并且这些程序类都无法拆分,显得程序臃肿而且影响JVM进程的执行速度。
JDK1.9之后决定将rt.jar文件进行拆分,将其拆分成不同的模块(module), 在执行程序的时候进行选择性的加载,最终来实现程序的运行, 使得对嵌入式应用开发变得更友好。

2. 模块化的好处

2.1 清晰的依赖管理

  1. Java可以根据module descriptor计算出各个模块间的依赖关系,一旦发现循环依赖,启动就会终止。
  2. 由于模块系统不允许不同模块导出相同的包, 所以在查找包时,Java可以精准的定位到一个模块,从而获得更好的性能。

2.2 精简JRE

通过Java 9新增的jlink工具,开发者可以根据实际应用场景随意组合这些模块,去除不需要的模块,生成自定义 JRE,从而有效缩小JRE大小。得益于此,JRE 11的大小仅为JRE8的53%。

2.3 更好的兼容性&安全性

Java一直以来,就只有4种包可见性,Java9之后,利用module descriptor中的exports关键词,模块维护者就精准控制哪些类可以对外开放使用,哪些类只能内部使用,换句话说就是不再依赖文档,而是由编译器来保证。类可见性的细化,除了带来更好的兼容性,也带来了更好的安全性。

2.4 提升Java语言开发效率

Java9之后,一改原先一延再延的风格,从Java9到Java14,三年时间相继发布了6个版本,无一延期。每个模块有清晰的边界(module descriptor)和独立的单元测试,对于每个Java语言的开发者而言,每个人只需要关注其所负责的模块,开发效率因此大幅提升。

3. jdk17的目录结构

下载安装jdk17后,可以看到jdk17中有jmods文件夹:
Alt text 在jdk文件中是和jmods中的模块相互对应的:
Alt text 引入模块系统之后,JDK自身被划分为94个模块,所有的模块都是以"*.jmod"文件后缀形式进行命名的。