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

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

點選上方“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

相關推薦

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的數據庫中,然後顯示出來,可是導入成功了。卻顯示不出來。 經過研究認為應該是緩存的原因

2000wredis只存放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程式設計師那樣戰戰兢兢。這是