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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java9 揭秘 jlink_初试Java9

發(fā)布時間:2024/7/23 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java9 揭秘 jlink_初试Java9 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原標題:初試Java9

Java 9 正式發(fā)布了

JDK 9

(http://openjdk.java.net/projects/jdk9/)

有不少重要或是有意思的新特性,這里簡單介紹下我的了解與嘗試

拋磚引玉

下載

oracle 官網(wǎng)下載即可。

(http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html)

安裝配置好之后, java -version 查看一下, 會看到

這里正有一個新特性[223], 新的版本字符串格式$MAJOR.$MINOR.$SECURITY.$PATCH.

值得一提的是,Java 9 以后,新的功能版本將每六個月更新一次, 每三年發(fā)布一次長期支持. 此外,下個版本并不是 Java 10,而是Java 18.3,將于2018年3月推出。

新特性

jigsaw 模塊化

可以說Java 9 最重要,也是受到最多關(guān)注的功能就是模塊化了。模塊化經(jīng)歷了多次跳票,帶來的改變也是巨大的。

首先,模塊化是一種將程序?qū)崿F(xiàn)為多個獨立模塊的方式,有助于降低系統(tǒng)的復(fù)雜性以及低耦合。

為什么需要模塊化呢,jigsaw 的項目描述里寫的很清晰:

使開發(fā)人員更容易構(gòu)建和維護庫和大型應(yīng)用

提高安全性,可維護性

提高性能

可輕量級部署,以用于小型計算設(shè)備和密集云部署

相關(guān)介紹我們結(jié)合對應(yīng)的JEP來看:

[261] 模塊系統(tǒng)

實現(xiàn)了Java平臺模塊系統(tǒng),以及相關(guān)JDK的特定更改和增強。

[200] 模塊化JDK

Java9將JDK也分為一堆模塊,可以在編譯, 構(gòu)建及運行時按照各種配置來組合。包括并不限于:

- 完整的JAVA SE平臺,完整的JRE及JDK 的配置;

- 與在Java SE 8中定義過的"緊湊型配置"(Compact Profiles) 在內(nèi)容上基本一致的配置;

- 或者是 僅包含 應(yīng)用模塊, 外部庫 以及它們所需要模塊的自定義配置。

JDK 自身的模塊化,使得用戶可以根據(jù)需要選擇模塊。小型設(shè)備上可以不必要運行完整的JDK,簡單的應(yīng)用不再必須加載幾十兆的 rt.jar, 后端應(yīng)用也可以舍去并用不到的 Swing 等UI模塊, 這使JAVA可以不那么臃腫。

[201] 模塊化源代碼

將JDK源代碼重組為模塊, 增強構(gòu)建系統(tǒng)以編譯模塊

[220] 模塊化運行時鏡像(Run-Time Images)

重組JDK和JRE運行時鏡像以適應(yīng)模塊,并提高性能, 安全性以及可維護性。定義新的URI方案,用于命名存儲在運行時鏡像中的模塊,類和資源,而不會透露鏡像的內(nèi)部結(jié)構(gòu)或格式。并根據(jù)需要修改現(xiàn)有規(guī)范以適應(yīng)這些變化。

[260] 封裝大多數(shù)內(nèi)部API

默認封裝JDK大部分內(nèi)部API,使其在編譯時無法訪問。并為后面的發(fā)行版做準備,使其在運行時也無法訪問。同時確保關(guān)鍵的,被廣泛使用的內(nèi)部API不被封裝,以便它們?nèi)钥捎?#xff0c;直到大部分功能都能被替換為止。

這就涉及模塊化的另一個特點了, 強封裝。

[275] 模塊化Java應(yīng)用程序打包

[282] jlink

在編譯和運行之間 引入了一個新的可選階段-鏈接,可以用 jlink 將一堆模塊及其依賴項組合并優(yōu)化到自定義運行時鏡像中。

舉個例子,假如我們寫了一個簡單的 helloWorld 的程序,只用到了 java.base 模塊。 就可以指定模塊打包:

output 里會得到一個完整可用的僅包含 java.base, 也就是基礎(chǔ)模塊的jre。同樣,我們也可以將自己的模塊一起打包。具體例子稍后給出。

Java 9 模塊之間的依賴關(guān)系圖

Java9 中,我們是通過 module-info.java 來定義并管理模塊,指定模塊之間的依賴關(guān)系的。默認包含基礎(chǔ)模塊 java.base。 這里舉例 java.sql 模塊的 module-info.java文件:

很容易看到這里和依賴關(guān)系圖里是一致的,java.sql 直接依賴了 java.xml 與 java.logging 兩個模塊。

在該 module-info.java 文件中, module 后面的 "java.sql" 即定義的當前模塊名。

requires ; 表示當前模塊A 依賴于另一個模塊B 。 transitive 修飾符表示, 如果有模塊依賴于A,則隱含地依賴B。

exports ; 表示當前模塊A 導(dǎo)出指定的 P包。 需要用到的模塊C 只需要 require A即可。也可以使用 (exports to ;) 來指定導(dǎo)出模塊,這樣的話對于C 以外的模塊來說,P 是不可見的。

可以看出,requires 是模塊級別, exports 則具體到包。編寫模塊的人可以很細致的管理以及限定真正想要導(dǎo)出的內(nèi)容。[260]里提到的正是這種情況, 像 sun.*, .internal. 等并不提倡使用, 就可以將這種API 指定只導(dǎo)出到用到的基礎(chǔ)模塊。

此外, 還支持服務(wù)提供者與使用者分離的機制。

uses ;

provides with , ...;

provides 提供服務(wù)接口的一個或多個實現(xiàn)類。 uses 指定服務(wù)接口, 然后當前模塊就可以使用 ServiceLoader 類進行加載。

參考官方文檔給出模塊化的一個簡單示例。

首先代碼很簡單,這里共4個文件, 兩個模塊, org.astro 與 com.greetings.

然后編譯及打包。

注: -p 同 --module-path, 是模塊路徑, 可以是包含模塊的一個或多個目錄。 -m 選項指定主模塊,斜杠之后的值是模塊中主類名。

jshell [222]

這是一個相當受歡迎的新功能。命令行直接輸入 jshell 就可以開始使用,可以作為隨手運行各種小代碼的工具, 非常方便。

tab 可以自動補全,可以忽略句尾分號。輸入 /exit 或Ctrl+D 即可退出。

HTTP/2 Client [110]

定義了新的HTTP client API,支持 HTTP/2及WebSocket,可以替換掉原有的HttpURLConnection。 不過相關(guān)的 API 放在了 jdk.incubator.http 下,而不在默認模塊里,也就是使用時需要在 module-info 里加上 requires jdk.incubator.httpclient;

Milling Project Coin [213] 一些小變化

@SafeArgs 注解之前只能用于static及final方法,現(xiàn)在也可用于私有實例方法。

try-with-resources 之前資源的聲明語句放在 try 關(guān)鍵字的括號里面,現(xiàn)在支持 effectively-final 變量。

只要編譯器能推斷出類型參數(shù), 匿名類允許使用<>

下劃線 _ 不能單獨用做標識符。

interface 之前已經(jīng)支持添加默認方法, 現(xiàn)在支持私有方法。

緊湊型字符串 [254]

String 采取更加節(jié)省空間的內(nèi)部表示,提高了空間效率,同時保持大多數(shù)情況下的性能,并完全兼容原有接口。

從 char[] 改為使用byte[],直接存放編碼。在構(gòu)造時設(shè)置 LATIN1 或者 UTF16。省內(nèi)存!

集合工廠方法[269]

Map/Set/List接口添加了簡單初始化不可變集合的工廠方法, 可以直接寫作如 List.of(1, 2, 3),不再需要挨個元素來 add 了。返回的是 java.util.ImmutableCollections 下定義的嵌套類型的實例, 注意,是不可變的集合。

總而言之,JAVA 9 的新特性還有很多,比如: 更新了進程相關(guān)接口(可以直接獲取 pid! )[102], 統(tǒng)一JVM日志[158],增強javadoc支持HTML5[224], javadoc 頁面終于加上了搜索條:) [225], 缺省GC 改為 G1 [248] , 實現(xiàn)SHA-3加密散列函數(shù)[287], 等等。

這里就不一一列舉了, 期待大家進行更深入的研究與分享。

備注

文中提到的鏈接:

JDK 9 新特性

http://openjdk.java.net/projects/jdk9/

JDK 9 下載鏈接

http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html

JDK 18.3 項目鏈接

http://openjdk.java.net/projects/jdk/18.3/

jigsaw 項目鏈接

http://openjdk.java.net/projects/jigsaw/

模塊依賴關(guān)系圖

https://bugs.openjdk.java.net/secure/attachment/72525/jdk.png

責任編輯:

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的java9 揭秘 jlink_初试Java9的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。