不說 Android,Java 本身都很碎片化。盡管 Java 更新換代,但于開發者來說,還是緊緊地抱着 Java 8 不放,這是為什麼呢?一起來看下吧。
以下為譯文:
近日的調查結果顯示,絕大多數開發人員的主要應用程式中使用的還是 Java 8。

資料來源:
https://snyk.io/blog/jvm-ecosystem-report-2018/在Java 8之前,使用者接受更高版本的Java的過程非常緩慢,特别是在企業中,因為在生産環境中接受新版本Java非常困難。
而引入了Lambda表達式和流的Java 8對許多開發人員來說都非常有吸引力。同時,微服務、持續釋出實踐和更好的自動化測試也讓接受新版本語言變得更容易,風險比以前更小。
那麼,鑒于這些因素,為什麼從Java 9開始每年兩次釋出新版本的情況下,開發人員還在堅持使用Java 8呢?目前Java最新的版本是Java 12,然而很少有人使用9~12的版本。推薦:Java 12 正式釋出,8大新特性!
估計你能猜到這其中的原因:“很複雜”。Java 8之後的版本發生了很多變化,這可能會導緻各個公司在Java更新上舉棋不定。
6 個月一次的釋出節奏
從2017年9月釋出Java 9開始,Oracle每六個月就會釋出一個新版本的JDK,具體來說是每年的三月和九月。現在持續釋出大行其道,是以一門語言一改以往三年釋出一次的做法,轉而采用更快的釋出速度,這也完全合情合理。
在新的釋出節奏下,不會再出現每幾年釋出一大堆功能的情況(伴随着風險極高的大型更新),而是在預定的日期内推出更小的釋出。當然,這些釋出包含的功能會少很多,但這種方式有幾個好處:
友善計劃。預定的釋出節奏不僅友善了語言開發者,也友善使用者制定更新計劃。
更高的品質。更頻繁的釋出意味着如果某次釋出中某個功能沒有做好,就會被推遲到下一次釋出。是以,語言開發者的壓力更小,不需要趕工完成功能,是以每次釋出的品質更高。
穩定的新功能來源。以前是每三年一次巨大的更新,而現在可以持續地獲得更新,包括語言特性、垃圾收集器的變化和性能改善。
如此快的釋出節奏也可能造成的負面影響,例如許多組織根本跟不上六個月一次的更新節奏。這一點也在考慮中,因為Oracle也會受到這個影響。
長期支援版
Oracle不願意像以前每三年釋出一個版本時那樣支援每個舊版本,這樣做的成本太高。
如果Oracle每六個月釋出的版本都要支援三年,那麼在2020年前後他們就要支援六個不同的版本!
相反,他們說每三年會有一個“長期支援的版本”(Long Term Support release,簡稱LTS),該版本會提供為期三年的支援。Java 8是一個LTS,目前的LTS是Java 11,下一個應該是Java 17。
Oracle每三年選擇一個版本提供長期支援和更新,其他版本僅支援六個月。
但是,兩個LTS之間的版本在下一個版本釋出時就會失去支援。這就是說,Java 10會替代Java 9,而Java 11釋出時又會替代Java 10。推薦:Java 10 最重要的 5 個新特性!
開發人員在更新Java 8時一般會直接更新到Java 11。
這就是如今出現這種局面的原因,一般來說,人們不會使用Java 9或10。就算他們用過,應該也都更新到了Java 11。推薦閱讀:Java 11 正式釋出,這 8 個逆天新特性教你寫出更牛逼的代碼。
短期版本應該在新版本釋出後立即更新,長期版本會支援至少三年,是以現在有兩種主要的更新途徑:
每六個月新版本一出來就更新。這意味着每六個月就要使用最新版本。這樣做的好處是能夠立即獲得新的語言特性,但這種方式通常隻适合那些習慣于迅速更新技術棧的人們。
隻更新長期支援版本。對于Java開發人員來說這種節奏更為熟悉。這種更新有三年一次大型更新的缺點,但人們有更多時間來評價這種更新帶來的風險。
也許還有一個折中的辦法:在生産環境中使用LTS版本,同時在CI中確定應用程式能在每六個月一次的新版本上運作。這樣既能将大型更新的風險降到最低,同時還能維護生産環境要求的穩定性。
授權變化
長期支援版本有個問題。Oracle的立場是,如果你需要長達三年的支援和更新,就應當考慮為其付費。是以,如果你想使用LTS版本并要求三年的支援,就要為Oracle的商業版JDK付費。
但是,Oracle也認識到并不是每個人都願意付費,而且許多人更喜歡用開源的方式工作,是以他們現在有兩個版本的JDK,其特性完全一樣,但授權不同。
商業版JDK可以在開發和測試中免費使用,但在生産環境中使用則需要付費;還有一個完全免費的OpenJDK版本。後者采用了開源的GPLv2+CPE授權,但其生命周期隻有六個月。
從競争的觀點來看,這其實是好事。Oracle始終會将JDK中的功能移植到OpenJDK中,甚至還包括那些曾經用于商業版的功能,如Java Flight Recorder和Java Mission Control等。
是以,由OpenJDK産生的一切JDK(也是絕大部分人都在使用的JDK)會包含你曾經用過的一切特性,甚至還會包括一些你沒用過的特性。
還有許多其他供應商提供JDK。大部分是免費的,部分JDK的支援時間和期限與Oracke JDK不一樣。這篇文檔(
https://docs.google.com/document/d/1nFGazvrCvHMZJgFstlbzoHjpAVwv5DEdnaBr_5pKuHo/preview#heading=h.xn49s5cqkp4j)列出了不同的選項,并按照可以免費使用、必須擁有商業授權才能使用的方式分類。
如果這些資訊難以消化,那麼最好的方法就是下載下傳AdoptOpenJDK(
https://adoptopenjdk.net/)建構的OpenJDK。這個JDK與Oracle JDK完全相容,而且主要的作業系統和平台上都有,你可以選擇不同的JVM(Hotspot或OpenJ9),他們還承諾為LTS版本提供至少四年的支援,而且還可以購買商業支援。
由于這個話題可能會非常複雜,我強烈建議閱讀Java Champion的這篇文章《Java Is Still Free》(
https://docs.google.com/document/d/1nFGazvrCvHMZJgFstlbzoHjpAVwv5DEdnaBr_5pKuHo/preview),文中提供了更詳細的資訊。
總結
從Java 8釋出之後許多情況都發生了改變:六個月一次的更新;授權、更新和支援的變化,以及JDK的擷取途徑等。在此之上還有語言變化,包括那些Java 9中引入的主要變化。
雖然這些變化讓人頭暈目眩,但其目的是為了給世界上最流行的語言提供高品質、頻繁且在計劃内的更新,同時讓負責該語言的人能夠持續做下去。
我們需要了解,這些改變可能會影響你的應用程式群組織,通過學習如何接受這些變化,最終會讓你接受Java 8以及其後每六個月一次的新版本中引入的改進。
關注Java技術棧微信公衆号,在背景回複關鍵字:Java,可以擷取一份棧長整理的 Java 8-12 新特性幹貨。
作者 | Trisha Gee 原文:
https://dzone.com/articles/beyond-java-8譯者 | 彎月 責編 | 屠敏 出品 | CSDN(ID:CSDNnews)