近日,New Relic釋出了最新的2022 Java生態系統報告,這份報告可以幫助我們深入的瞭解Java體系的最新使用情況,下面就一起來看看2022年,Java發展的怎麼樣了,還是Java 8 YYDS嗎?
Java 11成為新的標準
在2020年的時候,Java 11已經推出了1年多,但當時Java 8的佔有率高達84.48%。2年過去了,Java 11上生產的比例第一次超過Java 8,佔有率已經達到了48.44%。曾今的霸主Java 8幾乎跌掉了一半,以46.45%佔據第二。
而大勢所趨的、整個Java生態都在擁抱的Java 17在排行榜上還是處於比較低的位置。這個其實還是意料之中的,因為生態的支援還需要一定時間的演進,比如Spring這個Java生態的大基座,對於Java 17的重要支援還要等到今年年底的Spring Boot 3釋出(對這部分感興趣的小夥伴記得關注我,公眾號程式猿DD,長期分享這塊最前沿的專業解讀),同時周邊的其他各種框架、中介軟體也都要全面更上之後,才真正具備上生產的成熟度。
所以,先從Java 8到Java 11,還是一個不錯的選擇,小步快跑,免得到時候直接從Java 8到Java 17,步子太大,扯到x就不好了...
我正在連載Java 8之後的新特性解讀,這次一改之前的部落格風格,採用文件(https://www.didispace.com/java-features/)+ 視訊(B站、視訊號)的方式編寫,閱讀與學習體驗更加。感興趣的小夥可以關注收藏起來,能轉發分享下那是更好,這樣更有更新的動力。
最流行的非LTS版本:Java 14
從Java 9開始,Java版本的釋出模式發生了變化。每隔6個月就會有一個新版本釋出,但這些版本只在下一個版本之前受到官方支援。這樣做的目的是讓新功能更頻繁可用。
但是,與生產中的LTS版本相比,這些臨時的非LTS版本使用率一直都非常低,只有2.7%的應用程式在使用。
雖然像Azul Systems這樣的一些供應商在一些非LTS版本上提供了補丁,但大多數的供應商沒有這麼做。這可能是為什麼大家不願意使用的原因。在非LTS Java版本中,Java 14最受歡迎。
Oracle在縮水,Amazon在崛起
這次的報告中,值得關注的是JDK發行版的變化。雖然大部分開發人員還是會從Oracle獲得JDK,而OpenJDK專案中的開源內容已經產生了豐富的選擇。
上圖顯示了Oracle在對其JDK 11發行版進行更嚴格的許可證控制之後(在使用Java 17返回到更開放的立場之前)的變化。2020年的時候,Oracle以絕對優勢(約佔Java市場的75%)成為最受歡迎的供應商。2年過去了,雖然他們依然還是頭把交椅,但他們的份額已經減少了一半。而Amazon的市場佔有率從2020年的2.18%大幅攀升至22%。
從2021年11月以來,還有一些有趣的變化:在Java 17釋出之前,Eclipse Adoptium和Amazon在這份榜單上幾乎處於完全相反的位置。
容器中的資源分配
計算資源的配置
容器會影響人們分配計算和記憶體資源的方式。這份報告中的資料顯示,在容器中執行的應用程式中,少於四個核心的應用程式所佔的比例要高得多。
在人們經常部署容器的雲環境中,小規模執行的驅動力很有意義。但這一趨勢可能會給一些應用程式帶來意想不到的問題。比如:當執行的核心少於2個時,在最近JVM上使用預設的G1垃圾收集器所帶來的許多併發好處就消失了。所有這些單核例項可能都在使用序列收集器,併為此付出了效能代價,但許多人可能甚至不知道這一點。
記憶體資源的配置
在比較記憶體設定時,也會出現類似的趨勢,它們傾向於給容器中的例項分配更小的記憶體。
該報告中顯示,只有大約80%的容器化應用程式通過-XMX或-XX:MaxRAMPercentage標誌顯式請求JVM記憶體上限。從Java 9開始,JVM中的容器感知功能意味著這可能不會像過去那樣對這些應用程式造成安全問題,只要JVM是每個容器中執行的唯一程式。
最常用的垃圾收集演算法
垃圾收集(GC)演算法在JVM效能中起到核心作用,所以這塊一直以來都是社群討論最多的話題。新的資料顯示,在Java 8之後,垃圾收集器的使用發生了明顯的變化。
G1的總體受歡迎程度非常高。考慮到Java 11和更高版本上的G1收集器具有更新的預設設定和更高的效能,所以這一結果這並不令人驚訝。
原始報告我放到公眾號裡了,對細節內容感興趣的話,可以在公眾號中傳送關鍵詞:relic-java-2022,獲取完整報告。
好了,今天的分析那個就到這裡!如果您學習過程中如遇困難?可以加入我們超高質量的Spring技術交流群,參與交流與討論,更好的學習與進步!
歡迎關注我的公眾號:程式猿DD。第一時間瞭解前沿行業訊息、分享深度技術乾貨、獲取優質學習資源