【CSDN 編者按】Java 11應用占比超過Java 8,那些高喊Java 8「 YYDS」的人還在繼續堅持嗎?
近日,知名科技公司New Relic(總部位於美國舊金山的SaaS服務提供商)發布了《2022年Java生態系統狀況報告》,旨在揭露當下Java生態系統現狀。
報告稱,雖然現代規模龐大的軟件業中不乏可供選擇的編程語言,但Java還是憑藉它獨立於平台、提供成千上萬可支持的庫等優點,廣受軟件開發人員的歡迎。所以,幾乎每一個主要的行業和經濟部門都可見Java的身影。
2020年3月,New Relic基於數百萬個提供性能數據應用程序中收集到的數據,發布了首個《Java生態系統狀況報告》。而隨着自Java 11以來首個長期支持(LTS)版本——Java 17的發布,以前所收集到的數據都要重新審視。所以,根據最新收集的數據,New Relic對以下五個方面進行了調查分析,分別是:生產中使用最多的版本、最受歡迎的供應商、容器的興起、最常見的堆大小配置和最常用的垃圾收集算法。
報告中的數據完全來自於2022年1月向New Relic報告的應用程序,並不代表Java使用情況的全貌。New Relic對適當的數據進行了匿名和刻意粗粒度的處理,以提供對Java生態系統的總體概況。另外,報告中刻意排除了任何可能有助於攻擊者和其他惡意行為的詳細信息。
以下為《2022年Java生態系統狀況報告》的詳細內容:
Java 11 接班 Java 8,成最受歡迎版本
在2020年發布的報告中,儘管當時Java 11已經發布了一年多,但絕大多數應用程序仍在使用Java 8(占比84.48%)。但自那時起,這兩個LTS版本之間的占比開始發生了變化。
數據顯示,現在有超48%的應用程序在生產中使用Java 11(高於2020年的11.11%),Java 8緊隨其後,占比46.45%。Java 17的排名目前還不是很高,但它在發布後的幾個月里,已經超過了Java 6、Java 10和Java 16版本的占比。
每個Java LTS版本的使用百分比
另外,對Java 7的支持將在2022年結束,但仍有1.71%的應用程序在生產中使用它。同時,還有0.27%的應用程序在使用已經EOL的Java 6。不過,目前大多數正在使用Java 6和Java 7的一般都是尚未升級的遺留應用程序。
Java 14是最流行的非LTS版本
從Java 9開始,Java平台的發布模式就發生了變化,每六個月就會推出一個新版本的Java。但為了更頻繁地提供新功能,這些版本的支持周期一般只持續到下個新版本的推出。
然而,與生產中的LTS版本相比,臨時的、非LTS的Java版本使用率仍然非常低,只有2.7%的應用程序使用非LTS的Java版本。雖然Azul Systems等供應商會為一些非LTS版本提供補丁,但大多數供應商並沒有這樣做。這可能就是很多用戶不願意升級的原因。
每個Java非LTS版本的使用百分比
在使用的非LTS Java版本中,Java 14是最受歡迎的,Java 10和Java 16並列墊底。
甲骨文份額萎縮,亞馬遜正在崛起
近年來,使用Java開發工具包(JDK)的發行版來源發生了變化。以前許多開發者會從甲骨文獲得JDK,而現在OpenJDK項目中Java的開源為開發者們帶來了大量的選擇。
從下圖可以看出,在甲骨文對JDK 11發行版進行更嚴格的許可後(又在Java 17中恢復更開放的立場前),開發者從甲骨文中轉移二進制文件的情況。
2020年,甲骨文是最受歡迎的供應商,約占Java市場的75%。雖然現在保留住了頭把交椅,但份額已經萎縮至原來的一半以下。與此同時,Java之父就職的亞馬遜公司的市場份額已經大幅攀升到22.04%(2020年占比為2.18%)。
各供應商使用的JDK發行版的百分比
自2021年11月以來,除了總體遠離甲骨文的趨勢,這些數字還發生過有趣的變化。那就是,在Java 17發布之前,Eclipse Adoptium和亞馬遜在這個列表中幾乎處於完全相反的位置。
容器運行成主流
容器化應用程序已經成為主流,New Relic的Java應用數據也證明了這一點。據報告顯示,Java應用中70%以上是基於容器運行的。
容器中的計算設置
容器影響人們分配計算和內存資源的方式。例如,報告數據顯示,在容器中運行的應用程序,少於四個核心的比例要高很多。
按內核數量劃分,在容器內和容器外運行的應用程序的百分比
在人們經常部署容器的雲環境中,運行小型化的驅動力很有意義。但這種趨勢可能會給一些應用程序帶來意想不到的問題。特別是當使用兩個以下的內核運行時,最新Java虛擬機(JVM)上默認G1垃圾收集器的許多並發優勢會消失。所有這些單核實例可能都在使用串行收集器並為此付出性能成本,但許多開發者可能根本不知道。
容器中的內存設置
比較內存設置時也會出現類似的趨勢,在容器中往往傾向於更小的實例。
容器內和容器外運行的內存設置堆大小的百分比
報告數據顯示,只有大約80%的容器化應用程序通過-Xmx或-XX:MaxRAMPercentage標記明確要求JVM內存上限。從Java 9開始,JVM中的容器感知功能意味着,只要JVM是每個容器中唯一運行的進程,那它對應用程序來說,就不會像以前那樣成為安全問題。
G1是最受歡迎的GC算法
鑑於垃圾收集(GC)在JVM性能中發揮核心作用,所以其仍是社區中討論最多的一個話題。
New Relic的數據顯示,Java 8之後,垃圾收集器的使用發生了明顯變化。考慮到Java 11及更高版本的G1收集器有更新的默認值和更高的性能,所以G1受開發者歡迎並不令人驚訝。
Java 10或更早版本與Java 11或更高版本使用的GC算法的百分比
顯然,出於對G1的喜愛,很多開發者才會選擇拋棄Java 8。另外,在預料之中的是,其他在Java 8之後出現的實驗性收集器(ZGC和Shenandoah)在生產系統中的使用量仍然很小,畢竟這兩個收集器直到最近才達到生產就緒狀態。
報告鏈接:
https://newrelic.com/resources/report/2022-state-of-java-ecosystem

END
—點這裡↓↓↓記得關註標星哦~—
一鍵三連 「分享」「點讚」「在看」
成就一億技術人
