1. 程式人生 > >JDK 9 發布僅數月,為何在生產環境中卻頻遭嫌棄?

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

至少 貨幣 性能 strong 第一個 啟動 fast 性能提升 ast

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

  其中,整個 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 慘遭嫌棄?

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 的受支持周期更像是四年半。這些版本適用於喜歡穩定的企業,使其能夠在單個版本上運行大型的應用程序。

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