Java 9 新特性

Java 9 新特性

更新時間:2018.12.17

目錄

參考文檔

多數(shù)內(nèi)容摘錄于JDK 9新特性匯總绪颖,感謝所有的知識分享者屑咳。

1. 模塊系統(tǒng)[Jigsaw 項目](Modularity System)

Java 9中主要的變化是已經(jīng)實現(xiàn)的模塊化系統(tǒng)莹菱。

Modularity提供了類似于OSGI框架的功能,模塊之間存在相互的依賴關(guān)系蛤育,可以導(dǎo)出一個公共的API,并且隱藏實現(xiàn)的細節(jié)葫松,Java提供該功能的主要的動機在于瓦糕,減少內(nèi)存的開銷,在JVM啟動的時候腋么,至少會有30~60MB的內(nèi)存加載咕娄,主要原因是JVM需要加載rt.jar,不管其中的類是否被classloader加載珊擂,第一步整個jar都會被JVM加載到內(nèi)存當(dāng)中去圣勒,模塊化可以根據(jù)模塊的需要加載程序運行需要的class。

在引入了模塊系統(tǒng)之后未玻,JDK 被重新組織成 94 個模塊灾而。Java 應(yīng)用可以通過新增的 jlink 工具,創(chuàng)建出只包含所依賴的 JDK 模塊的自定義運行時鏡像扳剿。這樣可以極大的減少 Java 運行時環(huán)境的大小旁趟。使得JDK可以在更小的設(shè)備中使用。采用模塊化系統(tǒng)的應(yīng)用程序只需要這些應(yīng)用程序所需的那部分JDK模塊,而非是整個JDK框架了锡搜。

2. HTTP/2

JDK9之前提供HttpURLConnection API來實現(xiàn)Http訪問功能橙困,但是這個類基本很少使用,一般都會選擇Apache的Http Client耕餐,此次在Java 9的版本中引入了一個新的package:java.net.http凡傅,里面提供了對Http訪問很好的支持,不僅支持Http1.1而且還支持HTTP2(什么是HTTP2肠缔?請參見HTTP2的時代來了...)夏跷,以及WebSocket,據(jù)說性能特別好明未。

注意:新的 HttpClient API 在 Java 9 中以所謂的孵化器模塊交付槽华。也就是說,這套 API 不能保證 100% 完成趟妥。

3. JShell

JShell的目標(biāo)是提供一個交互工具猫态,通過它來運行和計算java中的表達式。開發(fā)者可以輕松地與JShell交互披摄,其中包括:編輯歷史亲雪,tab鍵代碼補全,自動添加分號疚膊,可配置的imports和definitions义辕。其他的很多主流編程語言如python都已經(jīng)提供了console,便于編寫一些簡單的代碼用于測試酿联。值得一提的是终息,JShell并不是提供了新的一個交互語言,在JShell中編寫的所有代碼都必須符合java語言規(guī)范贞让;圖形界面和調(diào)試支持也沒有周崭,JShell的一個目標(biāo)是可以在IDE中使用JShell交互,而不是實現(xiàn)IDE實現(xiàn)的功能喳张。

4. 不可變集合工廠方法

Java 9增加了List.of()续镇、Set.of()、Map.of()和Map.ofEntries()等工廠方法來創(chuàng)建不可變集合销部。
除了更短和更好閱讀之外摸航,這些方法也可以避免您選擇特定的集合實現(xiàn)。在創(chuàng)建后舅桩,繼續(xù)添加元素到這些集合會導(dǎo)致 “UnsupportedOperationException” 酱虎。

 List strs = List.of("Hello", "World");
 List strs List.of(1, 2, 3);
 Set strs = Set.of("Hello", "World");
 Set ints = Set.of(1, 2, 3);
 Map maps = Map.of("Hello", 1, "World", 2);

5. 私有接口方法

Java 8 為我們提供了接口的默認方法和靜態(tài)方法,接口也可以包含行為擂涛,而不僅僅是方法定義读串。

默認方法和靜態(tài)方法可以共享接口中的私有方法,因此避免了代碼冗余,這也使代碼更加清晰恢暖。如果私有方法是靜態(tài)的排监,那這個方法就屬于這個接口的。并且沒有靜態(tài)的私有方法只能被在接口中的實例調(diào)用杰捂。


interface InterfaceWithPrivateMethods {

    private static String staticPrivate() {

        return "static private";

    }

    private String instancePrivate() {

        return "instance private";

    }

    default void check() {    

        String result = staticPrivate();

        InterfaceWithPrivateMethods pvt = new InterfaceWithPrivateMethods() {

            // anonymous class 匿名類

        };

        result = pvt.instancePrivate();

    }

}

6. HTML5風(fēng)格的Java幫助文檔

7. 多版本兼容 JAR

當(dāng)一個新版本的 Java 出現(xiàn)的時候舆床,你的庫用戶要花費很長時間才會切換到這個新的版本。這就意味著庫要去向后兼容你想要支持的最老的 Java 版本 (許多情況下就是 Java 6 或者 7)嫁佳。這實際上意味著未來的很長一段時間挨队,你都不能在庫中運用 Java 9 所提供的新特性。幸運的是脱拼,多版本兼容 JAR 功能能讓你創(chuàng)建僅在特定版本的 Java 環(huán)境中運行庫程序時選擇使用的 class 版本

multirelease.jar

├── META-INF

│   └── versions

│       └── 9

│           └── multirelease

│               └── Helper.class

├── multirelease

├── Helper.class

└── Main.class

在上述場景中瞒瘸, multirelease.jar 可以在 Java 9 中使用, 不過 Helper 這個類使用的不是頂層的 multirelease.Helper 這個 class, 而是處在“META-INF/versions/9”下面的這個坷备。這是特別為 Java 9 準(zhǔn)備的 class 版本熄浓,可以運用 Java 9 所提供的特性和庫。同時省撑,在早期的 Java 諸版本中使用這個 JAR 也是能運行的赌蔑,因為較老版本的 Java 只會看到頂層的這個 Helper 類。

8. java9的垃圾收集機制

Java 9 移除了在 Java 8 中 被廢棄的垃圾回收器配置組合竟秫,同時把G1設(shè)為默認的垃圾回收器實現(xiàn)娃惯。替代了之前默認使用的Parallel GC,對于這個改變肥败,evens的評論是醬紫的:這項變更是很重要的趾浅,因為相對于Parallel來說,G1會在應(yīng)用線程上做更多的事情馒稍,而Parallel幾乎沒有在應(yīng)用線程上做任何事情皿哨,它基本上完全依賴GC線程完成所有的內(nèi)存管理。這意味著切換到G1將會為應(yīng)用線程帶來額外的工作纽谒,從而直接影響到應(yīng)用的性能

9. I/O 流新特性

java.io.InputStream 中增加了新的方法來讀取和復(fù)制 InputStream 中包含的數(shù)據(jù)证膨。

readAllBytes:讀取 InputStream 中的所有剩余字節(jié)。

readNBytes: 從 InputStream 中讀取指定數(shù)量的字節(jié)到數(shù)組中鼓黔。

transferTo:讀取 InputStream 中的全部字節(jié)并寫入到指定的 OutputStream 中 央勒。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市澳化,隨后出現(xiàn)的幾起案子崔步,更是在濱河造成了極大的恐慌,老刑警劉巖缎谷,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件井濒,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機眼虱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門喻奥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捏悬,你說我怎么就攤上這事撞蚕。” “怎么了过牙?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵甥厦,是天一觀的道長。 經(jīng)常有香客問我寇钉,道長刀疙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任扫倡,我火速辦了婚禮谦秧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撵溃。我一直安慰自己疚鲤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布缘挑。 她就那樣靜靜地躺著集歇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪语淘。 梳的紋絲不亂的頭發(fā)上诲宇,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音惶翻,去河邊找鬼姑蓝。 笑死,一個胖子當(dāng)著我的面吹牛维贺,可吹牛的內(nèi)容都是我干的它掂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼溯泣,長吁一口氣:“原來是場噩夢啊……” “哼虐秋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起垃沦,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤客给,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肢簿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體靶剑,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蜻拨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了桩引。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缎讼。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坑匠,靈堂內(nèi)的尸體忽然破棺而出血崭,到底是詐尸還是另有隱情,我是刑警寧澤厘灼,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布夹纫,位于F島的核電站,受9級特大地震影響设凹,放射性物質(zhì)發(fā)生泄漏舰讹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一闪朱、第九天 我趴在偏房一處隱蔽的房頂上張望月匣。 院中可真熱鬧,春花似錦监透、人聲如沸桶错。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至糯钙,卻和暖如春粪狼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背任岸。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工再榄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人享潜。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓困鸥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剑按。 傳聞我的和親對象是個殘疾皇子疾就,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容