加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

初识Java 9模块化编程

发布时间:2018-08-23 14:01:42 所属栏目:教程 来源:周明耀
导读:副标题#e# 技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战 【51CTO.com原创稿件】本文是Java9系列文章的第一篇,我会通过几篇文章系统性地介绍Java9的新特性。Java9的发布对于Java语言来说是新的开始,希望Java能够一直走下去,因

大家知道,当JVM开始加载类时,采用的方式是顺序读取classpath里面设置的类名并找到需要的类,一旦找到了正确的类,检索工作结束,转入加载类过程。那么如果classpath里面没有需要的类呢?那就会抛出运行时错误(run-time exception)。又由于JVM采用的延迟加载方式(lazy loading),因此极有可能某个用户点了某个按钮,然后就奔溃了,这是因为JVM不会从一开始就有效地验证classpath的完整性。那么,如果classpath里面存在重复的类,会出现什么情况呢?可能会出现很多莫名其妙的错误,例如类的方法找不到,这有可能是因为配置了两个不同版本的jar包。

2. 模块化系统目标

Java9的模块化系统有两大目标:

  • 模块化JDK本身;
  • 为应用程序的使用提供模块化系统。

模块化系统为Java语言和运行时环境引入了本地模块化概念,提供了强有力的封装。

如图1所示,在Java9之后,每一个jar包都变成了一个模块,包括引用其他模块的显示依赖。从图1可以知道,Application调用了JDK的Java.sql包。

应用程序的模块化调用关系

图2:应用程序的模块化调用关系

图3描述的是JDK内部的模型化系统(JSR376和JEP261),已经被合并到了JDK9。

JDK内部的模型化系统图

图3:JDK内部的模型化系统图

从图3大家可以知道,各个模块之间有着千丝万缕的引用关系,但是要记住,JDK9的模块化设计做得很精巧,它仅仅允许单一方向(向下)引用,不允许出现环形结构,这样可以确保引用关系图的简单设计原则。

3. 模块化的JDK

在Java模块化系统引入之前,JDK的运行时库包括了重量级的rt.jar,该jar文件的总大小超过60M,包含了大量的运行时类。为了重构整个Java平台,也为了Java能够在轻量级语言解决方案越来越占主导地位的情况下让Java语言继续保持旺盛的生命力,JDK团队引入了JDK的模块化设计,这个决定可能是关键性的。

在过去的20年中,JDK的若干次发布,每一次都会包含许多新的特性,因此也增加了大量的类。以CORBA为例,它在上世纪90年代的时候被认为是企业级计算的未来,当然现在几乎没有人记得它了,然而用于支持CORBA的类仍然被包含在rt.jar包里面,也就是说,无论你有没有用到这些类,只要你的应用程序是分布式的,你都不得不带着它们一起运行。这样做的直接后果是浪费了磁盘空间、内存空间,以及CPU资源(需要增大CPU运行耗时)。对于资源受限的硬件载体,或者云端的资源,这样就产生了浪费,也增加了成本(云端资源是按需申请的,能省就省)。

那么我们可不可以直接移除这些不需要的类呢?不能这么简单执行,因为我们需要考虑每次发布之后的向前兼容,直接删除API会导致JDK升级后一些老的应用程序不可用。JDK引入模块化管理方式后,我们只需要忽略包含CORBA的模块就可以了。

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读