標籤:發展 引入 port pre containe 運行環境 官方 可維護性 複雜
1.官方Feature
200: The Modular JDK
201: Modular Source Code
220: Modular Run-Time Images
260: Encapsulate Most Internal APIs
261: Module System
282: jlink: The Java Linker
2.產生背景及意義
談到 Java 9 大家往往第一個想到的就是 Jigsaw 項目。眾所周知,Java 已經發展超過 20 年(95 年最初發布),Java 和相關生態在不斷豐富的同時也越來越暴露出一些問題:
①Java 運行環境的膨脹和臃腫。每次JVM啟動的時候,至少會有30~60MB的記憶體載入,主要原因是JVM需要載入rt.jar,不管其中的類是否被classloader載入,第一步整個jar都會被JVM載入到記憶體當中去(而模組化可以根據模組的需要載入程式運行需要的class)
②當程式碼程式庫越來越大,建立複雜,盤根錯節的“意大利麵條式代碼”的幾率呈指數級的增長。不同版本的類庫交叉依賴導致讓人頭疼的問題,這些都阻礙了 Java 開發和運行效率的提升。
③很難真正地對代碼進行封裝, 而系統並沒有對不同部分(也就是 JAR 檔案)之間的依賴關係有個明確的概念。每一個公用類都可以被類路徑之下任何其它的公用類所訪問到,這樣就會導致無意中使用了並不想被公開訪問的 API。
④類路徑本身也存在問題: 你怎麼知曉所有需要的 JAR 都已經有了, 或者是不是會有重複的項呢?
同時,由於相容性等各方面的掣肘,對 Java 進行大刀闊斧的革新越來越困難,Jigsaw 從 Java 7 階段就開始籌備,Java 8 階段進行了大量工作,終於在 Java 9 裡落地,一種千呼萬喚始出來的意味。
Jigsaw項目(後期更名為Modularity)的工作量和難度大大超出了初始規劃。JSR 376 Java 平台模組化系統(JPMS,Java Platform Module System)作為 Jigsaw 項目的核心, 其主體部分被分解成 6 個 JEP(JDK Enhancement Proposals)。
作為java 9 平台最大的一個特性,隨著 Java 平台模組化系統的落地,開發人員無需再為不斷膨脹的 Java 平台苦惱,例如,您可以使用 jlink 工具,根據需要定製運行時環境。這對於擁有大量鏡像的容器應用情境或複雜依賴關係的大型應用等,都具有非常重要的意義。
本質上講,模組(module)的概念,其實就是package外再裹一層,也就是說,用模組來管理各個package,通過聲明某個package暴露,不聲明預設就是隱藏。因此,模組化使得程式碼群組織上更安全,因為它可以指定哪些部分可以暴露,哪些部分隱藏。
3.設計理念
模組獨立、化繁為簡
模組化(以 Java 平台模組系統的形式)將 JDK 分成一組模組,可以在編譯時間,運行時或者構建時進行組合。
4.實現目標
主要目的在於減少記憶體的開銷
只須必要模組,而非全部jdk模組,可簡化各種類庫和大型應用的開發和維護
改進 Java SE 平台,使其可以適應不同大小的計算裝置
改進其安全性,可維護性,提高效能
5.使用舉例
註:IntelliJ IDEA 2017.3支援模組化特性,這裡選擇此開發環境。
模組將由通常的類和新的模組聲明檔案(module-info.java)組成。該檔案是位於java代碼結構的頂層,該模組描述符明確地定義了我們的模組需要什麼依賴關係,以及哪些模組被外部使用。在exports子句中未提及的所有包預設情況下將封裝在模組中,不能在外部使用。
java 9demo 模組中的ModuleTest類使用如下:
對應在java 9demo 模組的src
下建立module-info.java檔案:
requires:指明對其它模組的依賴。
在java9test 模組的指定包下提供類Person:
要想在java9demo模組中調用java9test模組下包中的結構,需要在java9test的module-info.java中聲明:
exports:控制著哪些包可以被其它模組訪問到。所有不被匯出的包預設都被封裝在模組裡面。
6. 補充說明
關於更多Java 9 模組編程的內容請參考一本書:《Java 9 Modularity》 裡面講的比較詳細,介紹了當前Java對jar之間以來的管理是多麼的混亂,引入modularity之後的改變會是很明顯的差別。
尚矽谷面試官宋紅康
連結:https://www.jianshu.com/p/5d62f644f358
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
java9新特性-4-模組化系統: Jigsaw與Modularity