日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Java9新特性系列(模块化系统: Jigsaw-Modularity)

發布時間:2025/5/22 windows 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java9新特性系列(模块化系统: Jigsaw-Modularity) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模塊化的前時代

Ant時代 相信大家對Ant都不陌生,Ant是任務型的,定義了一系列的任務dir/compile/jar等等,缺點是操作文件 Maven時代 Maven/Gradle相對于Ant,增加了groupId/artifactId,版本管理,依賴管理 OSGI時代 OSGI用的比較少,估計大家比較陌生,其實我們用的Eclipse及插件都是OSGI編譯的

那么問題來了:當代碼庫越來越大,怎么管理類庫交叉依賴,以及類重復的問題呢?

產生背景及意義

  • 談到Java9大家往往第一個想到的就是Jigsaw項目。眾所周知,Java已經發展超過20年(95年最初發布),Java和相關生態在不斷豐富的同時也越來越暴露出一些問題:

    • Java運行環境的膨脹和臃腫。每次JVM啟動的時候,至少會有30~60MB的內存加載,主要原因是JVM需要加載rt.jar,不管其中的類是否被classloader加載,第一步整個jar都會被JVM加載到內存當中去(而模塊化可以根據模塊的需要加載程序運行需要的class)
    • 當代碼庫越來越大,創建復雜,盤根錯節的“意大利面條式代碼”的幾率呈指數級的增長。不同版本的類庫交叉依賴導致讓人頭疼的問題,這些都阻礙了Java開發和運行效率的提升
    • 很難真正地對代碼進行封裝, 而系統并沒有對不同部分(也就是JAR文件)之間的依賴關系有個明確的概念。每一個公共類都可以被類路徑之下任何其它的公共類所訪問到,這樣就會導致無意中使用了并不想被公開訪問的API。
    • 類路徑本身也存在問題: 你怎么知曉所有需要的JAR都已經有了, 或者是不是會有重復的項呢?
  • 同時,由于兼容性等各方面的掣肘,對Java進行大刀闊斧的革新越來越困難,Jigsaw從Java7階段就開始籌備,Java8階段進行了大量工作,終于在Java9里落地,一種千呼萬喚始出來的意味。

  • Jigsaw項目(后期更名為Modularity)的工作量和難度大大超出了初始規劃。JSR376 Java平臺模塊化系統(JPMS,Java Platform Module System)作為Jigsaw項目的核心, 其主體部分被分解成6個JEP(JDK Enhancement Proposals)。

  • 作為Java9平臺最大的一個特性,隨著Java平臺模塊化系統的落地,開發人員無需再為不斷膨脹的 Java平臺苦惱,例如,您可以使用jlink工具,根據需要定制運行時環境。這對于擁有大量鏡像的容器應用場景或復雜依賴關系的大型應用等,都具有非常重要的意義。

  • 本質上講,模塊(module)的概念,其實就是package外再裹一層,也就是說,用模塊來管理各個package,通過聲明某個package暴露,不聲明默認就是隱藏。因此,模塊化使得代碼組織上更安全,因為它可以指定哪些部分可以暴露,哪些部分隱藏。

設計理念

模塊獨立,化繁為簡 模塊化(以 Java 平臺模塊系統的形式)將JDK分成一組模塊,可以在編譯時,運行時或者構建時進行組合。

實現目標

  • 主要目的在于減少內存的開銷
  • 只須必要模塊,而非全部jdk模塊,可簡化各種類庫和大型應用的 開發和維護
  • 改進Java SE平臺,使其可以適應不同大小的計算設備
  • 改進其安全性,可維護性,提高性能

使用舉例

模塊將由通常的類和新的模塊聲明文件(module-info.java)組成。 該文件是位于 java 代碼結構的頂層,該模塊描述符明確地定義了我們 的模塊需要什么依賴關系,以及哪些模塊被外部使用。在 exports 子 句中未提及的所有包默認情況下將封裝在模塊中,不能在外部使用。 工程目錄結構:

分兩個module:

  • main-module
  • dog-module

dog-module中類如下:

package net.hellomypastor.java9.entity;public class Dog {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;} } 復制代碼

在src目錄下新建module-info.java:

module dog_module {exports net.hellomypastor.java9.entity; } 復制代碼

exports:控制著哪些包可以被其它模塊訪問到。所有不被導出的包 默認都被封裝在模塊里面

main-module中類如下:

package net.hellomypastor.java9;import net.hellomypastor.java9.entity.Dog;public class MyModule {public static void main(String[] args) {Dog dog = new Dog();dog.setName("dog2018");dog.setAge(1);System.out.println("happy new year 2018");System.out.println(dog.getName());System.out.println(dog.getAge());} } 復制代碼

在src目錄下新建module-info.java:

module main_module {requires dog_module; } 復制代碼

requires:指明對其它模塊的依賴

微信公眾號:碼上論劍 請關注我的個人技術微信公眾號,訂閱更多內容

總結

以上是生活随笔為你收集整理的Java9新特性系列(模块化系统: Jigsaw-Modularity)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。