成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 9的模塊化--壯士斷"腕"之涅槃

開發(fā) 開發(fā)工具
今天介紹一個Java 9的功能,模塊化(Modular);這可能使Java有史以來最大的Feature,它將自己長期依賴JRE的結(jié)構(gòu),轉(zhuǎn)變成以Module為基礎(chǔ)的組件。

2017年,Java誕生22周年!

Java

今天介紹一個Java 9的功能,模塊化(Modular);這可能使Java有史以來***的Feature,它將自己長期依賴JRE的結(jié)構(gòu),轉(zhuǎn)變成以Module為基礎(chǔ)的組件,這感覺就像一個壯士,需要把自己的胳膊,腿等,一個個拆下來,并且還能夠正常運行工作,難度可想而知。雖然,Java 9尚未發(fā)布,但這個功能讓人期盼和煎熬了好多年了。

從1995年的***天起,Java帶著一個口號,“Write once , Run anywhere” ,一路走來,從學(xué)院派的實驗語言,變成開發(fā)者最青睞的語言,然后成為企業(yè)開發(fā)的統(tǒng)一語言,二十弱冠。時光如斯,Java也從一個創(chuàng)新的語言,慢慢變成一種“傳統(tǒng)”,“老舊”,“經(jīng)典”語言,同時也接受很多新鮮語言的挑戰(zhàn),例如Go,Scalar等。

Java從來就不是一種***的語言:GC的效率總是給高并發(fā)程序員帶來不少痛苦和調(diào)整,Classpath地獄總是讓很多錯誤詭異的發(fā)生,高級語言特性總是在JCP(Java Community Process)里面踢皮球而無法落地,異步模式的多線程編程總是有陡峭的學(xué)習(xí)曲線,Oracle JDK和OpenSDK總是有扯不清楚的關(guān)系,孤芳自傲且讓人崩潰的J2EE框架。

但是,我還是最喜歡Java編程語言,不僅因為使用了20年,更有兩個原因:

  1. Java的生態(tài):幾乎所有開發(fā)庫都支持Java語言,Java是打開程序世界的鑰匙
  2. Java語言的開源:Java源代碼設(shè)計流暢,可以學(xué)到很多設(shè)計技能

模塊化從Java 7就開始計劃推出 ,但由于其過于復(fù)雜,不斷跳票 Java 7和Java 8,終于計劃在Java 9中推出,我們一起拭目以待吧! 目前,Java 9的功能基本開發(fā)完畢,剩下半年的時間,解決各種Bug。下面是Java 9的時間表!

Java 9的時間表

Java 9中最重要的功能

Java 9中最重要的功能,毫無疑問就是模塊化(Module),代碼名字叫做Jigsaw(拉鋸),這個拉鋸項目拉了幾年,終于要把龐大冗余的Java鋸成一個個的Module,方便開發(fā)和部署。熟悉Java的同學(xué),都知道JRE有一個超級大rt.jar(例如,Java 8的rt.jar中有65M),運行一個hello world,你也需要一個數(shù)百兆的JRE環(huán)境,如果在J2EE環(huán)境,情況將變得復(fù)雜無比。另外,如果你沒有深受Classpath Hell所害,說明你還不是一個深度Java程序員 ,呵呵 。

Java 8和Java 9的對比

模塊化的功能有幾個目的:

  1. 讓Java的SE程序更加容易輕量級部署
  2. 改進組件間的依賴管理,引入比Jar粒度更大的Module
  3. 改進性能和安全性

如果用更加簡單解釋,那就是“解決Classpath地獄問題,改進部署能力”。Module的內(nèi)容比較多,為了由淺入深,我按照一些問題和我的理解來介紹模塊化。

1.什么是Java Module(模塊)

模塊就是代碼和數(shù)據(jù)的封裝體,代碼是指一些包括類型的Packages。Package是一些類路徑名字的約定,而模塊是一個或多個Packages組成的一個封裝體。

什么是Java Module(模塊)

2. 模塊的代碼例子

模塊的是通過module-info.java進行定義,編譯后打包后,就成為一個模塊的實體;在模塊的定義文件中,我們需要指定模塊之間的依賴靠關(guān)系,可以exports給那些模塊用,需要使用那些模塊(requires) 。下面是一個例子:

  1. module com.foo.bar { 
  2.     requires org.baz.qux; 
  3.     exports com.foo.bar.alpha; 
  4.     exports com.foo.bar.beta; 
  5. META-INF/ 
  6. META-INF/MANIFEST.MF 
  7. module-info.class 
  8. com/foo/bar/alpha/AlphaFactory.class 
  9. com/foo/bar/alpha/Alpha.class 
  10. ... 

3.JDK8 和JDK9有什么不一樣?

JDK8的JRE的部署是一個單體模式,一個超大的rt.jar(大約60多兆),tools.jar也有幾十兆,即使使用一個Hello Worlds,你也需要一整套上百兆的JRE環(huán)境。

JAVA 9 引入模塊后,將所有的類組織成模塊形式,模塊之間有著優(yōu)美的依賴關(guān)系(至少現(xiàn)在很整齊,不知道過幾個版本會不會繼續(xù)保持優(yōu)雅)。

Java 8的包之間的依賴關(guān)系

[[181267]]

Java9的依賴關(guān)系(模塊之間依賴關(guān)系)

Java9的依賴關(guān)系(模塊之間依賴關(guān)系)

4. Public 不再意味著Accessible(可訪問了)

模塊之間的關(guān)系被稱作readability(可讀性),代表一個模塊是否可以找到這個模塊文件,并且讀入系統(tǒng)中(注意:并非代表可以訪問其中的類型)。在實際的代碼,一個類型對于另外一個類型的調(diào)用,我們稱之為可訪問性(Accessible),這意味著可以使用這個類型; 可訪問性的前提是可讀性,換句話說,現(xiàn)有模塊可讀,然后再進一步檢測可訪問性(安全)。

在Java 9中, Public不再意味著任意的可訪問性!

在Java 9中, Public不再意味著任意的可訪問性

在Java 9中, Public不再意味著任意的可訪問性

5.什么是模塊的Transitive 引用(間接引用)

舉個例子:

模塊的Transitive 引用

因此標(biāo)記了transitive可以可以提供一個間接可讀性。在myapp中,可以直接引用Logger類了。

模塊的Transitive 引用

6. Module 和Maven是什么關(guān)系

看完Module,這么詳細的表達依賴關(guān)系,是不是和什么軟件很相似?是不是想起了Maven還是Gradle? 仔細想象,Modular和它們還是不一樣的。

  • Modular是系統(tǒng)內(nèi)置用于表述組件之間的關(guān)系,對于版本的管理還是處于最原始的狀體。它管理一種強制的依賴關(guān)系。
  • Maven有兩個核心功能 a) 組件的依賴管理,特別是版本的管理,這種依賴是邏輯上的,并非強制的 b)管理開發(fā)過程中的各種任務(wù),初始化,測試等等。

7. JLink介紹

JLink是將Module進行打包的工具,幫助目標(biāo)機器的部署。打包后的文件將非常精簡。

JLink介紹

JLink介紹

8. Module的原理和實現(xiàn)

在內(nèi)部實現(xiàn)中,整個過程非常繁瑣復(fù)雜,大概有幾件事情;

a)將系統(tǒng)內(nèi)部類進行模塊化

這樣不用在區(qū)分太多J2ME, J2SE,J2EE了,大家都是用模塊作為溝通語言。這需要整理所有的類和它們調(diào)用關(guān)系,調(diào)用頻次等,把系統(tǒng)類模塊化,這可能最復(fù)雜的一部分,不過結(jié)果是***的。

b) 將ClassLoader分級

將ClassLoader分為三個級別,Bootstrap Loader具有***優(yōu)先級和權(quán)限,主要是核心的系統(tǒng)類;Platform Loader用于擴展的一些系統(tǒng)類,例如SQL,XML等;Application Loader主要用于應(yīng)用程序的Loader。在這三個級別的Loader下面有一個統(tǒng)一Module 管理,用于控制和管理模塊間的依賴關(guān)系,可讀性,可訪問性等。 注意,ClassLoader在Java 9中的類裝載邏輯和之前一樣,但是,通過模塊管理系統(tǒng),ClassLoader.FindClass的能力,將被限制在readable&accessible的條件下,而不是之前的簡單的Public條件。

ClassLoader分級

好了,啰嗦了這么多,期待一個簡單好用的Java 9,希望今年能真正用上。

【本文為51CTO專欄作者“歐陽辰”的原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系作者本人獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2016-08-12 15:45:03

Chrome瀏覽器Flash谷歌

2012-06-15 17:17:32

2017-09-18 13:34:44

Facebook

2012-08-09 09:38:09

RIM私有化

2021-10-14 14:58:19

網(wǎng)絡(luò)安全俄羅斯信息安全

2012-07-30 09:32:25

微軟WP8諾基亞

2019-06-03 15:54:04

RadwareADC模式應(yīng)用交付

2018-03-21 21:31:28

Java9編程Java

2018-12-19 08:59:06

裁員IBM轉(zhuǎn)型

2025-02-14 11:25:45

2019-08-28 16:18:39

JavaScriptJS前端

2017-09-22 18:50:50

模塊化Java 9發(fā)布

2017-09-10 17:08:11

Java 9程序Oracle

2015-12-04 10:09:55

Java 9模塊化發(fā)布

2015-10-10 11:29:45

Java模塊化系統(tǒng)初探

2020-09-17 10:30:21

前端模塊化組件

2020-09-18 09:02:32

前端模塊化

2009-08-17 10:11:12

C# Windows

2010-03-24 08:34:44

OSGiJava模塊化

2022-09-05 09:01:13

前端模塊化
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲二区在线 | 国产在线视频一区 | 欧美不卡| 亚洲欧美国产一区二区三区 | 一级毛片免费看 | 美女131mm久久爽爽免费 | 国产综合视频 | 日韩理论电影在线观看 | 精品久久久一区 | 亚洲综合大片69999 | 国产成人av一区二区三区 | 日本色婷婷 | 在线欧美视频 | 欧美中文字幕一区二区 | 一区二区三区日韩 | 成人小视频在线观看 | av免费网站在线观看 | www.久| 欧美国产日韩在线观看 | 99久久精品国产一区二区三区 | 天天操天天怕 | 国产欧美一区二区三区在线看 | 国产欧美在线 | 国产中的精品av涩差av | 日韩精品视频在线播放 | 日韩欧美第一页 | 日本精品在线播放 | 亚洲精品电影 | 亚洲综合色自拍一区 | 99视频网站| 久久久日韩精品一区二区三区 | 91精品国产一区二区三区 | 欧美一区二区在线播放 | 日韩精品一区二区三区 | 中日字幕大片在线播放 | 国产精品视频中文字幕 | 国产欧美一区二区三区日本久久久 | 99精品视频在线观看免费播放 | 精品久草| 91精品久久久久久久久99蜜臂 | 亚洲精品久久久一区二区三区 |