JDK 9 釋出僅數月,為何在生產環境中卻頻遭嫌棄?

CSDN資訊發表於2017-12-05

點選上方“CSDN”,選擇“置頂公眾號”

關鍵時刻,第一時間送達!

千呼萬喚始出來,在經歷了整整一年的跳票之後,Java 9 終於在 9 月 21 日撥開雲霧,露出真正的面目。對眾多 Java 程式設計師來說,這一天無疑是一個重大的日子,首先 Java 開發者們再也不用羨慕別的自帶 REPL 的語言了,不用為了試個 Java 功能而開個 Groovy shell;其次最主要的莫過於 Jigsaw 專案下顛覆性的 Java 模組化了,有了它,自己定製/裁剪 JDK 變得更直接。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

其中,整個 Java 的核心內容非 JDK 莫屬,其包括了 Java 執行環境(Java Runtime Envirnment)、Java 工具和 Java 基礎的類庫。而無論什麼樣的 Java 應用伺服器實質都是內建了某個版本的 JDK,因此掌握 JDK 是學好 Java 的第一步。

JDK 9 主要特性

對於最新發布的 Java 9,JDK 9 有哪些主要的特性呢?

1、Jigsaw 專案:顛覆性的模組化 JDK

Jigsaw 專案是為了模組化 Java 程式碼,並將 JRE 分成相互協作的元件。這個 JEP 是邁向 Jigsaw 四步中的第一步,它只是模組化 JDK 原始碼,不會改變 JRE 和 JDK 的真實結構,從而使得編譯系統能夠模組編譯並在構建時檢查模組邊界。

這個專案原計劃隨 Java 8 釋出,但因為推遲,所以被放到了 Java 9 中。Jigsaw 專案一旦完成,將允許開發者根據專案的需要自定義元件,從而減少 rt.jar 的大小;還可以做到使 Java 能夠更加容易的應用到小型計算裝置(如網路裝置)中,同時也能夠使得開發者更加容易地構建和維護這些類庫。

2、簡化了的程式 API

目前,Java 控制與管理系統程式的能力是有限的,為了獲得作業系統的一些資訊需要呼叫本地程式或者其他變通方案。然而,在 Java 9 中將會新增一些新的、直接明瞭的方法來處理程式 ID、名字和狀態以及列舉多個 JVM 和程式等,從而擴充套件 Java 與作業系統的互動能力。

3、 輕量級的 JSON API

儘管目前有多種處理 JSON 的 Java 工具(如 Google 的 Gson、阿里巴巴的 FastJson、IBM 的 Json4J 等),但 JSON API 是 Java 語言的一部分,輕量並且運用了 Java 8 的新特性。JSON API將放在 java.util 包裡一起釋出,這樣,開發者就可以直接使用 JDK 而無需再引入第三方 JSON 工具包了。

4、 錢和貨幣的相關 API

Java 9 引入了新的貨幣 API, 用來表示貨幣, 並支援幣種之間的轉換和各種複雜運算。

5、 改善鎖爭用機制

鎖爭用限制了許多 Java 多執行緒應用效能,新的鎖爭用機制改善了 Java 物件監視器的效能,並得到了多種基準測試的驗證(如 Volano),這類測試可以估算 JVM 的極限吞吐量。實際中, 新的鎖爭用機制在 22 種不同的基準測試中都得到了出色的成績。如果新的機制能在 Java 9 中得到應用的話, 應用程式的效能將會大大提升。

6、程式碼分段快取

Java 9 的另一個效能提升來自於JIT(Just-in-time)編譯器。當某段程式碼被大量重複執行的時候, 虛擬機器會把這段程式碼編譯成機器碼(native code)並儲存在程式碼快取裡面, 繼而通過訪問快取中不同分段的程式碼來提升編譯器的效率。程式碼分段快取機制將會提升許多方面的效能,如當 JVM 進行垃圾回收掃描的時候,就可以直接跳過永駐程式碼,從而提升效率。

7、智慧 Java 編譯工具

智慧 Java 編譯工具(sjavac)的第一階段始於 JEP139 這個專案, 用於在多核處理器情況下提升 JDK 的編譯速度。如今,這個專案已經進入第二階段即 JEP199, 其目的是改進 Java 編譯工具,並取代目前 JDK 編譯工具 javac,繼而成為 Java 環境預設的通用的智慧編譯工具。

  • JDK 9 下載地址:

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

將應用程式遷移到 JDK 9:Yes or No?

瞭解完 JDK 9 的所有特性,很多開發者都在討論是否要將專案遷移到 JDK 9。

接下來,本文根據以“你遷移到 JDK 9 的計劃是什麼?”為主題開展了一項民意調查,旨在給眾多開發者瞭解將應用程式移植到 JDK 9 過程中所處的階段。

調查一共有兩次,分別面向 EMEA(歐洲、中東、非洲三地區的合稱) 和美洲的開發者。

對於“是有有意願將專案遷移到 JDK 9 ?”主題的調查包含了以下的選擇:

  • 已在生產環境中使用 JDK 9

  • 正在遷移到 JDK 9

  • 正在觀望中

  • 等待下一個長期支援版的釋出

  • 還在使用 JDK 6

具體的調查資料如下:

來自 EMEA (歐洲、中東、非洲三地區的合稱)開發者的調查結果:

0?wx_fmt=png

來自美洲開發者的調查結果:

0?wx_fmt=png

綜合結果:

0?wx_fmt=png

使用 JDK 9 的使用者為零

根據以上的調查結果,可以看到,“正在觀望中”的開發者佔了大多數,而使用舊版本的朋友仍有不少,但意外的是,使用 JDK 9 的使用者居然一個都沒有。雖然這次調查的樣本量可能不夠大,但我們相信這確實是比較貼近現實的。

為何期盼已久的 JDK 慘遭嫌棄?

JDK 9 為何如此慘淡?下面我們將探索 JDK 9 很少在生產環境中被採用的根本原因:

  • 應用程式從 JDK 8 或更早版本遷移至 JDK 9 出現的不相容變更情況的數量。儘管已經從標準 API 中移除的六種方法不會影響很多人,但是像停止 JVM 啟動的命令列選項的數量將是一個障礙。

  • 內部 JDK API 封裝的影響。同樣,直接受此影響的開發者數量也不會很大,但間接受到影響的開發者數量則很多。因為大多數開發者在開發應用程式時使用了第三方庫和框架,有很多這樣的庫和框架使用封裝的 API。雖然大部分已經過測試並提供專門針對 JDK 9 的版本,但仍然有很多還沒這樣做。對於沒有得到積極維護的庫或框架來說,這無疑是一個會阻礙遷移至 JDK 9 的問題。

  • 受支援的壽命週期。甲骨文最近宣佈將加快 JDK 的釋出頻率,改為每六個月釋出一次。按照改進的釋出計劃,JDK 9 不是長期支援版本。在這個新方案下,JDK 9 將是以 JDK 8 為基礎的第一個“功能”版本。而且由於公共的更新,開發者在決定要部署的 Java 版本時,需要記住一些東西。長期支援版本的更新將至少提供三年,而 JDK 8 的受支援週期更像是四年半。這些版本適用於喜歡穩定的企業,使其能夠在單個版本上執行大型的應用程式。

對此,有不少網友也表示:

Glavo:

個人感覺挺失望的。

Java 9 庫上的改動很小,API 上的變動更小,而語法新特性貌似一樣都沒有,所以對我來說,Java 9 沒有太大的吸引力。

模組化是這個版本的 Java 裡最大的改動,不過我感覺造成的破壞性還是有點大。之前非正式版的 openjdk9 上我連 gradle 都跑不起來。就算用上了正式版,我還是看到一群人在群裡抱怨某某應用跑不起來,各個庫和框架的移植也要等上好久。

新的工具 jaotc 和 jshell 我也試了一下。jaotc 目前還算不上真正可用。而且就算真正可用了,個人感覺在短時間內還是難以比過一些目前已經存在的一些 aot 編譯器。

jshell 也算是 Java 的一個進步,不過功能還是挺弱的,用起來濃濃的 jline 風,編輯功能基本上也都是 jline 自己提供的,而且貌似也沒有彩色顯示?比起 Kotlin 沒有補全的命令列的 repl 算是強一點,但是和 Scala repl 比起來都還是有一定差距的。

下面,只希望 Java 10 能做的更好吧!

許懷遠:

JDK 9 語法幾乎沒有增強,核心庫也只有少量改進,JVM 提升也不大,但它卻是個轉折點。

大刀闊斧砍掉 32 位版本,想用 32 位的,要麼用 JDK 6/7/8,要麼出門左轉 OpenJDK。

砍掉了 VisualVM 和 jhat 等 JVM 診斷工具,下一個版本會不會砍掉 JFR?

Java 8 的專案,很大可能預設啟動不了,甚至不加引數編譯不了,模組化帶來的陣痛。

每半年釋出一個新版本,比之前三年一個版本快的多,長期支援版本尚未釋出。將 Java EE 和 Java SE Embedded 甩給了社群,Oracle 要減少投入?

綜合以上幾點,Java 6 是 Win XP,Java 8 是 Win 7,Java 9 算是砍掉 32 位的 Win 8,註定是個臨時過度版本,想遷移到 9 的團隊,多半會等下一個長期支援版。

總結

大多數開發者表示,他們將繼續在生產環境中使用 JDK 8,至少直到下一個 LTS 版釋出。而根據甲骨文展示的計劃,在 LTS 版本之間進行轉換對開發者來說頗具挑戰性。

那麼,你對 JDK 9 怎麼看呢?現在已經在生產環境中使用了嗎,還是繼續觀望中?

————— END —————

0?wx_fmt=jpeg

雷軍:全面屏新零售微信都是我先提的,為什麼你們只記住了蘋果馬雲張小龍?

640?wx_fmt=jpeg

劉強東暗諷馬雲王健林:為什麼還有幾千萬人極度貧困?這是恥辱!

640?wx_fmt=jpeg

一文讀懂馬雲、馬化騰、李彥宏、庫克等網際網路大佬們都在烏鎮幹了啥


640?wx_fmt=jpeg640?wx_fmt=png

相關文章