模块化
一、产生的背景及意义
谈到java9大家第一个想到的应该是Jigsaw 项目,众所周知,Java已发布了20多年,Java和相关的生态在不断丰富的同时,也暴露出一些问题:
Java运行环境的膨胀和臃肿
每次JVM启动时,至少需要 30~ 60M 的内存加载,主要原因是JVM需要加载 rt.jar ,不管其中的类是否有被ClassLoader加载,整个Jar都会被加载到JVM中去。(而使用模块化可以根据需要只加载程序运行需要的class)当代码库越来越庞大,越来越复杂,不同版本的类库交叉依赖很让人头疼,这些阻碍了Java的开发和运行效率。
很难真正的对代码进行封装,而系统并没有对不同的jar之间的关系有个明确的概念,每一个公共的类都可以被任意类路径下的其它公共类所访问到,这样也导致无意中使用了并不想被公开的API
类路径本身也存在一定的问题,你怎么知道所需要的jar都有了?或者是否会有重复的包呢?
同时,由于兼容性等各方面的掣肘,对java大刀阔斧的革新也越来越难,Jigsaw 从 Java 7 就开始筹备,Java 8 进行了大量的工作,终于在Java 9 落地。
作为Java 9 平台最大的一个特性,随着Java 平台模块化系统的落地,开发人员无需再为不断膨胀的Java 平台苦恼,例如,你可以使用 jlink工具,根据需要定制运行环境,这对于拥有大量镜像的容器应用场景或复杂关系的大型应用等,都具有非常重要的意义 。
本质上讲,模块(module)的概念,其实就是在 package 外再包裹一层。也就是说,用 module 来管理包,通过声明某些包暴露,不声明默认就是隐藏。因此,模块化使得代码组织更加安全,因为他可以指定哪里包可以暴露,哪些可以隐藏。
二、实现目标
- 减少了内存的开销
- 只需要 requires 模块,而非全部jdk,可简化各种类库和大型应用的开发
- 改进java SE 平台,使其可以适用不同大小的平台设备
- 改进安全性、可维护性、提高性能