JDK 9 釋出僅數月,為何在生產環境中卻頻遭嫌棄?
點選上方“CSDN”,選擇“置頂公眾號”
關鍵時刻,第一時間送達!
千呼萬喚始出來,在經歷了整整一年的跳票之後,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 9:Yes or No?
瞭解完 JDK 9 的所有特性,很多開發者都在討論是否要將專案遷移到 JDK 9。
接下來,本文根據以“你遷移到 JDK 9 的計劃是什麼?”為主題開展了一項民意調查,旨在給眾多開發者瞭解將應用程式移植到 JDK 9 過程中所處的階段。
調查一共有兩次,分別面向 EMEA(歐洲、中東、非洲三地區的合稱) 和美洲的開發者。
對於“是有有意願將專案遷移到 JDK 9 ?”主題的調查包含了以下的選擇:
-
已在生產環境中使用 JDK 9
-
正在遷移到 JDK 9
-
正在觀望中
-
等待下一個長期支援版的釋出
-
還在使用 JDK 6
具體的調查資料如下:
來自 EMEA (歐洲、中東、非洲三地區的合稱)開發者的調查結果:
來自美洲開發者的調查結果:
綜合結果:
使用 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 —————
雷軍:全面屏新零售微信都是我先提的,為什麼你們只記住了蘋果馬雲張小龍?
劉強東暗諷馬雲王健林:為什麼還有幾千萬人極度貧困?這是恥辱!
一文讀懂馬雲、馬化騰、李彥宏、庫克等網際網路大佬們都在烏鎮幹了啥
相關文章
- 如何建立 Angular library 並在生產環境中消費Angular
- Java列舉類在生產環境中的使用方式Java
- 在生產環境使用Docker部署應用Docker
- 我還在生產玩 JDK7,JDK 15 卻要來了!|新特性嚐鮮JDK
- jdk環境變數JDK變數
- 這家公司打造了千億量級IP,為什麼遭全球玩家嫌棄?
- JDK1.8 JVM生產環境引數配置JDKJVM
- 配置JDK環境變數JDK變數
- ubuntu JDK 環境變數UbuntuJDK變數
- JeecgBoot 如何在生產環境關閉 Swagger 文件bootSwagger
- Telescope 在生產環境配置的許可權,還是彈出 403 頁面
- 配置jdk環境變數win10教程_win10jdk環境變數如何配置JDK變數Win10
- jdk安裝,環境變數配置JDK變數
- JDK各版本環境變數配置JDK變數
- JDK13環境變數配置JDK變數
- java jdk 設定環境變數JavaJDK變數
- 單例模式在生產環境jedis叢集中的應用單例模式
- ForkJoinPool在生產環境中使用遇到的一個問題
- 你還在生產環境改程式碼麼?函式計算版本管理(三)使用別名進行灰度釋出函式
- JDK環境變數的兩種配置方法——以JDK8和JDK10為例JDK變數
- win10怎麼配置jdk環境變數_window10jdk環境變數配置步驟Win10JDK變數
- 在生產環境中除錯 Angular 應用程式而不顯示源對映除錯Angular
- 【Swagger】2.不在生產環境暴露,可以修改預設地址Swagger
- 在生產環境中使用預寫日誌WAL的SQLite - victoriaSQLite
- JDK1.8環境變數設定JDK變數
- JDK環境搭建JDK
- 可用於生產的JDK 19 釋出JDK
- 如何一步步在生產環境上部署django和vueDjangoVue
- 常用的DOS命令和配置JDK環境變數JDK變數
- jdk在linux下安裝、配置環境變數JDKLinux變數
- Ubuntu配置JDK環境變數(ubuntu java_home)UbuntuJDK變數Java
- linux系統安裝jdk,配置環境變數LinuxJDK變數
- Webpack中的sourcemap以及如何在生產和開發環境中合理的設定sourcemap的型別Web開發環境型別
- 如何在生產環境中通過Restful API的方式請求重啟Spring Boot應用?RESTAPISpring Boot
- 直播預約 | 在生產環境中,阿里雲如何構建高效能雲原生容器網路?阿里
- ASP.NET Core OData 9的釋出,放棄 .NET FrameworkASP.NETFramework
- 如何在生產環境排查 Rust 記憶體佔用過高問題Rust記憶體
- JDK Tomcat MySQL環境配置JDKTomcatMySql
- Linux安裝jdk環境LinuxJDK