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 —————
相關推薦
JDK 9 釋出僅數月,為何在生產環境中卻頻遭嫌棄?
點選上方“CSDN”,選擇“置頂公眾號” 關鍵時刻,第一時間送達! 千呼萬喚始出來,在經歷了整整一年的跳票之後,Java 9 終於在 9 月 21 日撥開雲霧,露出真正的面目。對眾多 Java
JDK 9 發布僅數月,為何在生產環境中卻頻遭嫌棄?
至少 貨幣 性能 strong 第一個 啟動 fast 性能提升 ast 千呼萬喚始出來,在經歷了整整一年的跳票之後,Java 9 終於在 9 月 21 日撥開雲霧,露出真正的面目。對眾多 Java 程序員來說,這一天無疑是一個重大的日子,首先 Java 開發者們再也不
C++入門經典-例7.9-對象數組,批量化生產
申請 例如 指針 生產 內容 入門經典 nbsp 同時 經典 1:在數組內容中我們了解到,數組是通過指針分配到的一段額定大小的內容。同樣,數組也可以包含對象。聲明對象數組的形式如下: box boxArray[5]; box boxArray2[2]={box(1,1,1)
【116】vue-router使用懶載入機制,在生產環境中,如何避免瀏覽器快取Webpack 3 編譯後生成的js路徑,導致404錯誤。(二)
整理思路 要解決這個問題,F5 重新整理是最好的解決辦法。但是每次釋出新版本後,都要求使用者主動按 F5 重新整理瀏覽器,會讓使用者覺得不方便。這對於快速迭代的產品來說尤其突出。 所以為了方便使用者使用,我們希望當前端頁面修改之後,系統能夠自動重新整理頁
【115】vue-router使用懶載入機制,在生產環境中,如何避免瀏覽器快取Webpack 3 編譯後生成的js路徑,導致404錯誤。(一)
前言 為了適應不斷變化的市場需求,軟體產品需要持續部署。生產環境的部署週期往往短則一週,長則半個月。在這一持續部署的過程中,前端開發人員要面臨一個問題:生產環境部署了新版本的程式碼後,如果使用者沒有 F5 重新整理瀏覽器,就會導致瀏覽器快取Webpack 3
距離蘋果釋出iOS 12.1僅數小時,一個新的密碼繞過漏洞又被曝出
據外媒The Hacker News報道,距離蘋果公司釋出最新作業系統版本iOS 12.1僅僅幾個小時的時間,西班牙安全研究員Jose Rodriguez就再次設法找到了一種新的iPhone密碼繞過攻擊方法,可以讓任何人在鎖定的iPhone上檢視所有聯絡人的私人資訊。 為了演示這個漏洞,Rodr
Unity 5正式釋出:支援21種平臺、個人版免費!釋出僅一年,虛幻引擎4宣佈完全免費!
Unity Technologies正式釋出了次時代多平臺引擎開發工具Unity 5,含有大量的圖形改進和擴充套件的編輯器功能集,支援移動、主機、虛擬現實等21種不同平臺,個人版完全免費,專業版售價1500美元,或以75美元進行月租。 http://unity3d.com/
ACCESS通過一個連接寫入的數據,還有一個連接卻讀取不出來
type acc 而是 dcl 讀取 ret class 保存 rip 近期在用c#實現一個數據導入的功能,將一個ACCESS數據庫中的數據導入到還有一個ACCESS的數據庫中,然後顯示出來,可是導入成功了。卻顯示不出來。 經過研究認為應該是緩存的原因
2000w數據,redis中只存放20w的數據,如何保證redis中的數據都是熱點數據
策略 olt nvic 大小 行數 keys env 過期 ttl redis 內存數據集大小上升到一定大小的時候,就會施行數據淘汰策略。 redis 提供 6種數據淘汰策略:voltile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選
為什麼 JDK 9 在生產環境中很少被採用?
來自:開源中國社群 連結:www.oschina.net/news/91166/who-will-use-jdk-9 參考:https://www.azul.com/who-will-use-jdk-9/ 你有遷移到 JDK 9 的計劃嗎,是怎麼樣的?你已經在生產環境中使用 JDK 9 了嗎,或者只
C語言迴文數判斷,結果寫入檔案中
#include<stdio.h> //判斷一個數是否為迴文數。 // //設n是一任意自然數。若將n的各位數字反向排列所得自然數n1與n相等,則稱n為一回文數。 //例如,若n=1234321,則稱n為一回文數;但若n=1234567,則n不是迴文數 void
生產環境中,通過域名映射ip切換工具SwitchHosts
data sts track ack switch driver eve tail blog 項目中,經常需要配置host。將某個域名指向某個ip。手動配置C:\Windows\System32\drivers\etc\hosts,非常不方便。這裏分享一個可以高效切換hos
Hadoop datanode正常啟動,但是Live nodes中卻突然缺少節點
tar ade clas pos body bce href 12g class 熱h9燦秤擅樸r5廈氯仿素慚馱什澆俾腿諶nr哉認贍http://blog.sina.com.cn/s/blog_172d23f1e0102wy3m.html亮ci冒缸習劣qy攣頹凹煌用仝較露導
整型數據在不同Python環境中的差異
pri tro spa python2 過大 style 範圍 str pan 整型數據在Python3中是沒有大小和範圍的限制 1 num = 10**100 #表示 10 的 100 次方 2 print(num) 此時輸出為正確的答案,10的100
react 專案,在生產環境去掉 propTypes 檢查程式碼,打包時自動去除
關於PropTypes PropTypes包含一整套驗證器,可用於確保你接收的資料是有效的。 能幫助我們在開發的時候及時發現問題。 沒有propTypes定義,元件依然能夠正常工作,而且,即使在propTypes檢查出錯的情況下,元件依然能工作。 propTyp
明白生產環境中的jvm參數
owin log 事件 one 這也 ron 內存大小 alloc session 明白生產環境中的jvm參數 寫代碼的時候,程序寫完了,發到線上去運行,跑一段時間後,程序變慢了,cpu負載高了……一堆問題出來了,所以了解一下生產環境的機器上的jvm配置是有必要的。比如說:
Windows Server2008伺服器可以遠端桌面,但在內網中卻Ping不通--解決方法
Windows Server2008伺服器可以通過遠端桌面登入,但在內網中卻Ping不通。所以要考慮的是防火牆是不是做了限制。 最簡單粗暴的方法是直接把防火牆給關掉 還有個其他的方法是參考別人寫的,我這裡沒有做驗證,有需要的朋友可以自己驗證下哦,原文章地址:https://blog.c
解決VMWare中“二進位制轉換與此平臺上的長模式不相容,此虛擬環境中的長模式將被禁用”問題
【轉自】http://blog.sina.com.cn/s/blog_63b15fc901019wkn.html 在使用Windows7 64位作業系統時,無法執行VMWare或MS Virtual server等軟體虛擬作業系統。提示為“提示:軟體虛擬化與此平臺上的長模式不相容. 禁用長模式.
最新版windows 2012R2、Apache24、mod_wsgi、Django1.9、python3.4專案部署(生產環境)
感慨一句,歷經千辛萬苦終於在騰訊雲windows2012R2伺服器上部署了Django個人部落格。話不多說,大家先看看效果。Django個人部落格 個人 心得:第一次在wondows伺服器上部署Django。饒了很大彎子,踩了很多坑。現在回過頭總結,常見
Java GC 分析,JVM生產環境引數例項及分析,JVM詳細配置
什麼是 Java GC Java GC(Garbage Collection,垃圾收集,垃圾回收)機制,是Java與C++/C的主要區別之一,作為Java開發者,一般不需要專門編寫記憶體回收和垃圾清理程式碼,對記憶體洩露和溢位的問題,也不需要像C程式設計師那樣戰戰兢兢。這是