2019年Java和JVM生態系統預測:OpenJDK將成爲Java運行時市場領導者

本文對2019年Java和JVM生態系統做了一些預測。

正如InfoQ 2018年度總結中說的那樣,Java在2018年的發展勢頭非常有意思。

在我們步入2019之際,讓我們來看看在新的一年中Java和相關技術值得注意的點,並試着猜測未來會發生些什麼。

免責聲明: 以下猜測僅僅是作者個人做出的,並不是來自Oracle、InfoQ或其他方面的官方聲明或路線圖。

Java 11將出現小規模但意義重大的採用

有關這個預測的爭議是最小的。Java 9和Java 10在生產環境中的部署量很小,很多團隊似乎都在等待後Java 8 LTS版本的發佈,現在它來了,Java 11的採用將會以小而穩的速度開始。

導致Java 11被採用的一個推動因素是微服務和容器化的應用程序,使用Java 11實現二者都比使用Java 8來得容易。在部署全新的應用程序時,Java 11顯然是團隊更好的選擇。

預測:到2019年底,Java 11安裝率將佔據Java產品安裝總量的10%左右。

Java 8應用程序不會大規模遷移到Java 11

到現在爲止,Java應用程序更新路徑都是相對清晰的。從Java 6到Java 7,從Java 7到Java 8,幾乎可以說是沒有障礙的。但是從Java 8到Java 11並不是這樣的,要將重要的應用程序遷移到新版本需要做大量的工作。

只有很少團隊具備足夠的資源用於遷移、重構和重新測試應用程序。因此,如果沒有足夠的外部理由,我不認爲今年會有大規模Java 8應用程序被遷移到Java 11上。

預測:沒有具體的可量化預測。

不會出現類似於Python 2/Python 3的分裂

很多人已經討論過這個可能性,即隨着Java模塊化的出現,Java生態系統可能會出現類似於Python社區已經經歷過的Python 2/Python 3分裂。

但我並不認爲會發生這種情況,因爲從根本上說,在語法和語義層面,Java 11並非一門完全不一樣的語言。Python的不同版本之間在語法和關鍵數據類型(比如說Unicode字符串或長整型)方面發生了變化,所以庫和應用程序作者必須有意識地選擇使用哪個版本,這種選擇蔓延到了整個生態系統中。

但對於Java來說,應用程序所有者需要決定是否要接受模塊化,而庫開發人員需要決定是否作爲模塊進行部署,如果是的話,需要爲Java 8應用程序提供什麼樣的回退措施。對Java程序員來說,工作大致和之前相同,無論項目是基於Java 8還是Java 11,基本上還是使用相同的語言進行編程。

預測:沒有具體的可量化預測。

漸進式的Graal採用

已經遷移到Java 11的項目可能也會關注Graal。Graal提供了下一代JIT編譯器,新編譯器可能會在2019年達到(甚至超過)Java 11的C2編譯器(即-server)水平。

Graal-JIT遲早會超過C2,Graal的設計(特別是它是用Java實現的)意味着Graal團隊可以很容易地實現任何C2可以實現的新優化。

“Graal”還包含了Oracle半開放的多語言運行時GraalVM。不過需要注意的是,Graal-JIT僅適用於Java 11及以上版本,而GraalVM僅涵蓋了Java 8。

因此,Graal用戶社區可能會分爲兩個部分,一部分關注Java 11應用程序的性能,一部分關Java 8生態系統的多語言應用程序。

預測:30%到40%的Java 11應用程序將在生產環境中使用Graal-JIT。
討論是否將Graal作爲Java 13的默認JIT編譯器,但最後未能實現。
GraalVM在生產環境的部署還是很少,但會有越來越多的應用程序團隊開始嘗試使用它。

OpenJDK成爲Java運行時的市場領導者

Oracle宣佈終止對OpenJDK 8項目的所有權,Red Hat提出要接管該項目。OpenJDK 11項目可能也會一樣,在Java 12發佈的時候,Oracle將會放棄這個項目。

很多開發人員沒有注意到Oracle的LTS產品僅針對付費用戶,所以將來對Java 8(以及Java 12發佈後的Java 11版本)的支持不會是由Oracle組織來提供,而是由Red Hat、Amazon、Azul Systems以及多廠商和社區驅動的AdoptOpenJDK項目來提供。

由於不再有免費的Oracle JDK發佈到社區,我預測人們會快速將OpenJDK作爲Java應用程序的生產平臺。

好消息是,對於服務器端應用程序(以及越來越多的Java桌面程序),OpenJDK也是Oracle JDK的替代品。

預測:到2019年底,超過50%的Java 8和Java 11生產運行時會使用OpenJDK而不是Oracle JDK。

Java 12的發佈

Java 12功能已經確定,將在2019年3月發佈。除非有重大事件的發生,否則這次發佈會按時進行。

這不是長期支持的版本,不太會被廣泛採用(就像Java 9和Java 10沒有被廣泛採用一樣)。

預測:Java 12按時發佈,並在2019年底出現少量的生產部署。

Java 13發佈

Java 13將在2019年9月發佈。目前對於該版本將包含哪些功能並沒有太多相關信息。

和Java 12一樣,它是一個功能發佈版本,並非LTS版本。因此,現在沒有理由認爲它無法按時發佈。同樣,它也不會被廣泛使用,團隊會更關注於遷移到Java 11。

預測:Java 13按時發佈,並在2019年底出現少量生產部署。

值類型不會在Java 13中預覽發佈

值類型是除原始類型和對象引用之外的第三種JVM基礎類型。這個概念可以被認爲是放寬了Java類型系統規則,可以像C語言的結構體那樣組合數據結構,同時保證完整的Java類型安全。

Java語言架構師Brian Goetz用“代碼像類,功能像int”這樣的話來描述他想象該特性發布以後一個典型的開發人員會如何使用值類型。

實現值類型的努力一直在繼續,但到2018年底,只出現了試驗性、非常早期、只有專家使用的測試原型。

這一點也不奇怪,值類型是Java平臺最根本和最深入的變更之一。

這一功能的複雜度和期望度以及所涉及的大量工程工作使得它不太可能在2019年內交付。

預測: 即使在Java 13預覽功能中也不可能出現任何形式的值類型。

match表達式首個版本將在Java 13中預覽發佈

switch表達式是match表達式的先決條件。如果語法中沒有表達式形式,match表達式也不可能出現在Java中。事實上,如果沒有match表達式,那麼引入switch表達式也就變得沒那麼重要。

因此,我預測標準的switch表達式推出後,緊隨其後會出現簡單的match表達式。該功能剛開始可能僅限於類型匹配,不包含解構或其他高級功能。

預測:在Java 13的預覽功能中會包含初始、有限的match表達式。

Kotlin適度增長

來自JetBrains的Kotlin語言在最近幾年裏獲得了越來越多開發人員的關注。特別是在Android領域出現了爆發式增長,Android領域的新項目改由Kotlin主導。

然而,在服務器端Java方面並沒有出現類似的爆發性增長。在2019年,我預計Kotlin的使用會穩定增長,但並不會有大量項目或團隊突然轉向使用Kotlin。會有一些高知名度的項目公開使用Kotlin。

預測:Kotlin將持續獲得Java核心社區成員的追捧,但並不會發生爆發式增長,規模還是比Scala生態系統小。

一如往常

上面提到了Java比較突出的一些變化。然而,在Java世界腹地,未來一年中將大致保持不變。Java的IDE、庫和生態系統的其餘部分將大致保持相同。

Java在業內將繼續保持穩固地位和發展趨勢,並不會出現什麼重大轉折。

預測:沒有具體的可量化預測。

查看英文原文:Java in 2019 - Some Predictions

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章