java9新特性-4-模組化系統: Jigsaw與Modularity

來源:互聯網
上載者:User

標籤:發展   引入   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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.