00:00
好,那接着呢,我们来谈谈扎va酒接下来的这样一些特性啊,诶我们在前面呢,介绍扎va酒主要的这个特性的时候呢,非常明确的指出了扎VA9当中最主要最核心的一个变化呢,就是模块化系统啊,那这个模块化系统呢,最初呢,我们称作呢叫做JSO这个项目,那后面呢,它更名为叫moity啊这样的一个项目。那我们这个模块化系统呢,呃,是通过官方提供的,有六个啊,GDP所体现的,呃,JP呢,咱们上面已经提到了,呃,Gdk enhancement proposals啊,Java呢,改进提案,好,这里边的六个,每一个呢,大家实际上呢都可以点开,这呢其实是一个,呃我粘过来的时候是对应的一个超链接啊,这呢就是对我们每一个GP进行的一个介绍啊,这里边呢,其实写的呢非常的详细。啊,那主要呢,就是看各位英语的这个水平的掌握情况了啊,如果还可以的话呢,其实你看一看这些文字啊,同时呢,还读懂了,其实呢是比较有成就感的。
01:03
啊,其实在这稍微说一说啊,这个呃,我们编程里边呢,这些英文其实呢,大家你刻意的呢,去记一记,发现呢,其实它的词汇量也比较有限啊,同时的话呢,它的语法规则其实也没有想象的那么复杂啊,不像大家呢,考这个六级啊,考这个托福雅思啊,考这个考研英语啊,那有的时候呢,这一段话啊,比如这一段话是吧,就一句话里边呢各种从句。啊,其实呢,编程语言里边你会发现呢,它基本上都是短句啊,啊同时的话呢,这每一个意思呢,其实都比较直接啊,都比较直接,词汇量呢也不大,不会出现这种一词多义的情况。啊,大家呢,可以下来呢,有兴趣的话呢,去读一下,那这块呢,我们首先呢,就直接来介绍一下这个模块化系统啊为何物。好,首先呢,一提到JAVA9的变化呢,那优先呢,我们就考虑到这个叫这这个项目啊,那这个项目呢,是基于什么样的问题提出来的呢?这儿呢,我们列举出来了一些啊Java的问题。
02:03
呃,JDK呢,我们知道从九五年的发布到现在呢,2017年已经有20多年的时间了啊,那伴随着它的内库的不断的丰富啊,同时呢,也暴露出来了一些新的问题啊,这个呢,其实我们认为也是比较合理的啊,不管是系统软件也好,还是我们说人类社会也好啊,不断的在发展的同时,这个呃,国家的一些机构啊,一些制度啊,往往呢,就会显出来一些臃肿的特点啊,那我们Java呢也不例外。我们的GM呢,每次在启动的时候呢,至少有30~60兆的内存呢,需要加载到内存中。啊,那GM呢,我们加载时候需要用到呢,叫RT.java呃,这个JA包呢,大家也并不陌生,我们在前面呢已经介绍了,啊呃,Runtime运行时这个环境需要用到的所有类库。啊,那这个被加载的时候呢,整个炸包呢都会被加载,那它花费的这个时间呢,就要稍微多一些,而事实上呢,我们在项目当中你是不一定啊,要使用到所有的类库的。
03:04
啊,所以我们这里这个模块化的一个意义呢,就是呢,将我们整个这个呃,相当于是运行时环境用到的这些类库呢,做了一个划分啊,需要的你就加载,不需要呢就不要加载了,那一定程度上呢,是加快了我们这个呃加载的一个速度。好,怎么做到的,我们后面说啊,那第二个问题呢,就是当代码库越来越大啊,创建复杂的盘根错节的意大利面条式的代码呢的几率呈几何级的一个增长。啊,这个有同学呢,没有吃过意大利面是吧,那你可以想象成叫Chinese noodle,就咱们平时吃的面条,或者你想象成方便面也行啊这个呢,交互在一起啊,就是呃,内库呢,交叉依赖啊,阻碍了Java开发和运行的一个效率提升。啊,其实也很好理解啊,那下一个问题呢,就是我们在项目当中呢,涉及到很多的类库啊,创建了很多Java类,那每一个公共的类呢,都可以被路类路径之下的任何其他的公共类呢所访问,那这样呢,就会无意中导致了一些并不想被公开的一篇。
04:09
那这呢,我们就提到了,呃,咱们的模块化系统啊,它里边呢,就提到了哪些对外暴露,哪些不对外暴露,就又有一个这个封装的一个意义了啊,使得我们这个代码呢,访问起来就更加的安全啊,一会儿说啊,下一个问题就是内路径本身呢啊,也存在问题啊,你怎么知晓所有需要的账啊都已经有了,或者呢,是不存在有重复的项呢?诶大家知道我们写一个项目呢,一旦这个它所依赖的这个炸包比较多的时候呢,这一页是非常多的啊你。很难判断说我们是否已经有重复的这个项了啊,就有这样类似的一些问题啊。当然了,这个咱们谈一个新东西的时候呢,往往会说新东西所依赖的一个背景是什么,就会谈很多不好的方面,对吧?啊就像一个新的一个王朝,他的建立呢,它肯定要基于原来这个王朝的一个腐败腐朽是吧,替天行道啊,然后呢,啊,建立一个合法的政权啊,其实这个事儿呢,也很好理解啊,这儿呢,我们提了Java很多的这个点。
05:10
啊,这个大家关注一下就OK了啊呃,那接下来呢,我们来提一提这个JAVA9中这个模块化啊,其实本身这个模块化的话呢,在很早呢就发现这个问题了啊,但是呢,我们从这个呃,JDK7开始呢,进行筹备发动呢,进行大量工作,在九的时候呢才落地啊出现了,因为这里边还涉及到一个兼容性的问题。啊,兼容性的问题哈,就是我们每推出一个新的功能的时候呢,都要考虑到啊,在旧的这个这个项目当中怎么去体现是吧,就是考虑到这种兼容性的一个一个解决啊,那今天呢,我们讲这个新特性的时候呢,在说到第四个点的时候,诶,我们要说到一个多版本兼容的炸包,诶给大家来提一提这个兼容性的一个问题啊。呃,应该说呢,这个模块化系统本身呢,需要耗费这个大量的精力去做这个事情啊,因为说呢,它基本上可以对我们整个这个Java代码的进行一个大的变动,变动啊,包括后期呢,我们的一些框架呢,也要进行一个大的改变,呃另一方面的话呢,这个模块化本身的话呢,它的知持上呃也是褒贬不一啊,最初的时候呢,像Oracle IBM啊,还有这个red cat,小红帽是吧,他们在一起商量的时候呢,嗯,在五月份啊,这个模块化呢,就被否决了啊,六月份呢,就是改进以后呢再投票这才通过了。
06:29
啊,但即使这样取得了一致呢,那到底能给这个开发者带来多大的这个好处啊?专家们呢,其实也是褒贬不一的啊,但总之呢,我们在扎花酒当中已经体现了模块化。啊,已经体现模块化,主要呢,就是通过我们刚才提到的六个GDP所体现的啊,嗯,那这个模块化的话呢。我们先说一下这个它的一个理解吧,它其实就是在咱们原来写的工程的基础之上啊,咱们原来创建一个Java工程,下面的话呢,主体上就是包的概念。
07:02
啊,那现在这个模块呢,是又在这个包的上面呢,又包了一层啊简单来说呢,就是这样,比如说呢,这两个包呢,是在这个Mo当中啊,这两个包呢,是在这个model当中啊,那有了不同的mole的概念以后,我们就可以决定什么事呢,哎,我比如说上边呢是我这个model a,下边呢是我的model b。那我就可以决定,我module b当中的包一可以被module a啊来访问,而我这个package b package2呢,我就不允许A来访问,那一定程度上就达到了一个隐藏的目的。那A呢,也同样的道理。啊,是这样的一个设计思想,使我们从这个代码上来看呢,就是更安全了。啊,更安全了啊啊从这个软件开发的角度来说的话呢,呃,障碍语言层面呢,提供了对模块的支持,可以鼓励啊,或者说呢,应该叫强制啊,更加规范的开发实践。
08:00
啊,利用呢,就是在业界的开发领域所积累的几十年经验和教育教训呢,总结出来的这个实践啊,促进Java生态的一个健康发展。啊,是这样的情况啊,行,然后的话呢,我们在JAVA9这个平台上呢,还可以怎么着呢,使用一个这叫J的一个工具,诶我们可以呢,去定制运行时的环境。哎,这也呢,是针对于咱们一开始提到的这个问题哈,诶,我们在运行的时候,如果一个项目本身呢,比如说我们的运营式环境涉及到Java层面呢,比如我们有2000个模块。那发现呢,我们这里写的这个项目呢,比较小,诶实际上我只用到这里边呢,其中的20个模块,那这个时候呢,咱们其实只需要加载这20个模块到我们的项目中就可以了,哎,剩下的啊,2000减去20等于啊1980是吧?哎,那这么多模块呢,我就不用再去加载了。那一定程度上来讲,我们加载的其实的启动的这个时间呢,就要少很多了。
09:02
对吧?哎,其实也很好理解啊,启动时间小了,占用的内存小了,那就意味着呢,我们可以在更小的设备上去运行我们的Java程序。啊,这也呢,是我们实现的一个目标啊,这也就是刚才提到这个事情,那同时呢,呃,因为你加载的模块少了,内存的开销呢,也就少了。嗯呃,只需要加载必要的模块,而并非全部的JDK模块,可以简化各种类库和大型应用的开发和维库,很好理解啊,改进安全性,刚才我们已经提到了,想暴露的我就对外暴露这个package,不想暴露的我就默认情况下就是只能在本Mo中使用。啊,这是我们的一个实现目标啊,那它的设计理念是什么呢?这儿呢,我写了两个词。啊,一个呢叫模块独立啊,第二个呢叫化繁为简。啊,模块独立很好理解啊,将我们整个JDK呢,分成一个一个的modu啊模块划分为简,哎,我们通过module之间的相互调用啊,去完成我们相应的这个工程。
10:08
啊,不会像原来一样相互的盘根错节啊,这个相互之间调动起来呢,就非常的复杂啊,越来越臃肿。好,这呢是我们对这个模块化呢,这个进行了一个说明,那接下来呢,我们再来呢,就是来通过代码去演示一下我们这个模块化是如何体现。
我来说两句