當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]來(lái)源:blog.csdn.net/mengyidan/article/details/120308102Java17已正式發(fā)布,該版本是自Java11以來(lái)的首個(gè)長(zhǎng)期支持版本。Oracle還提議將JDKLTS發(fā)布的節(jié)奏從每三年一次改為每?jī)赡暌淮危⑶颐總€(gè)LTS版本的服務(wù)時(shí)間至少8年...

來(lái)源:blog.csdn.net/mengyidan/article/details/120308102


Java 17 已正式發(fā)布,該版本是自Java 11以來(lái)的首個(gè)長(zhǎng)期支持版本。Oracle 還提議將 JDK LTS發(fā)布的節(jié)奏從每三年一次改為每?jī)赡暌淮危⑶颐總€(gè)LTS 版本的服務(wù)時(shí)間至少8年以上。Java 版本通常是6個(gè)月一更新,時(shí)間分別在3月和9月,而這些版本的支持時(shí)間基本在半年左右。



Java17,有史以來(lái)最快?JDK


Java各個(gè)版本的生命周期



據(jù)Oralce官博透露,雖然6個(gè)月版本的使用人數(shù)在增長(zhǎng),但大部分組織及企業(yè)更傾向于把LTS版本用在生產(chǎn)環(huán)境中,從而得到更加穩(wěn)定可靠的服務(wù)。這一點(diǎn)從Snyk發(fā)布的2021 Java社區(qū)報(bào)告中也可以得到證實(shí),雖然有61.5%的人在生產(chǎn)中使用Java 11,但仍有一半的Java 11用戶(目前使用最多的版本)在他們的生產(chǎn)堆棧中使用Java 8。




1


Oracle 推出 Free Java License


Java17,有史以來(lái)最快?JDK


截圖自O(shè)racle官博



自Java被Oralce收購(gòu)以后,付費(fèi)JDK就一直被人詬病,現(xiàn)在好了,Oracle 宣布推出JDK免費(fèi)服務(wù)。什么意思呢?讓我們來(lái)看一下官方解釋:



  • Oracle正在為行業(yè)提供免費(fèi)的,領(lǐng)先的Oralce JDK,包括所有季度安全更新,并包含商業(yè)和生產(chǎn)用途。


  • 新許可是“Oracle 免費(fèi)條款和條件”(NFTC) 許可。此Oracle JDK許可證允許所有用戶免費(fèi)使用,甚至可以用于商業(yè)和生產(chǎn)用途。只要不收費(fèi),再分發(fā)是允許的。


  • 開(kāi)發(fā)人員和組織現(xiàn)在無(wú)需點(diǎn)擊即可輕松下載、使用、共享和重新分發(fā) Oracle JDK。


  • Oracle 將從Oracle JDK 17開(kāi)始提供這些免費(fèi)版本和更新,并在下一個(gè) LTS 版本之后繼續(xù)提供整整一年。以前的版本不受此更改的影響。


  • Oracle 將繼續(xù)按照自 Java 9 以來(lái)的相同版本和時(shí)間表提供GPL下的Oracle OpenJDK 版本。



總結(jié)成一句話,“免費(fèi)”也并不意味著開(kāi)發(fā)者可以隨心所欲,因?yàn)镺racle的 NFTC 是禁止付費(fèi)重新分發(fā)其 Java 軟件。



而在Java 17正式發(fā)布之前,Java開(kāi)發(fā)框架Spring率先在官博宣布,Spring Framework 6和Spring Boot 3計(jì)劃在2022年第四季度實(shí)現(xiàn)總體可用性的高端基線:



  • Java 17 (來(lái)自 Spring Framework 5.3.x 線中的 Java 8-17)


  • Jakarta EE 9 (來(lái)自Spring框架5.3.x 線中的 Java EE 7-8)



通過(guò)實(shí)際行動(dòng)來(lái)支持 Java 17,間接呼吁開(kāi)發(fā)者,是時(shí)候使用 Java 17了。



2


要不要升級(jí)呢?Java 17 到底有多快?


看到如此誠(chéng)意滿滿的更新,開(kāi)發(fā)者到底要不要升級(jí)呢?盡管只需切換JDK即可體驗(yàn)Java 17。對(duì)此,OptaPlanner網(wǎng)站做了一項(xiàng)基準(zhǔn)測(cè)試:Java到底有多快?通過(guò)比較 JDK 17、JDK 16 和 JDK 11 來(lái)告訴你答案。



基準(zhǔn)方法



硬件:一個(gè)穩(wěn)定的機(jī)器不運(yùn)行任何其他的計(jì)算要求苛刻的流程,配置:Intel® Xeon® Silver 4116 @ 2.1 GHz (12 cores total / 24 threads)和128 GiBRAM內(nèi)存,運(yùn)行RHEL 8 x86_64。



JDK版本



  • JDK 11



openjdk 11.0.12 2021-07-20
OpenJDK Runtime Environment Temurin-11.0.12 7 (build 11.0.12 7)
OpenJDK 64-Bit Server VM Temurin-11.0.12 7 (build 11.0.12 7, mixed mode)


  • JDK 16



openjdk 16.0.2 2021-07-20
OpenJDK Runtime Environment (build 16.0.2 7-67)
OpenJDK 64-Bit Server VM (build 16.0.2 7-67, mixed mode, sharing)


  • JDK 17



openjdk 17 2021-09-14
OpenJDK Runtime Environment (build 17 35-2724)
OpenJDK 64-Bit Server VM (build 17 35-2724, mixed mode, sharing)


JVM 選項(xiàng):-Xmx3840M并明確指定垃圾收集器:



  • -XX: UseG1GC 對(duì)于 G1GC,低延遲垃圾收集器(所有三個(gè) JDK 中的默認(rèn)值);


  • -XX: UseParallelGC 對(duì)于 ParallelGC,高吞吐量垃圾收集器。



Main classorg.optaplanner.examples.app.GeneralOptaPlannerBenchmarkApp 來(lái)自optaplanner-examplesOptaPlanner 中的模塊8.10.0.Final。



  • 每次運(yùn)行都使用 OptaPlanner 解決 11 個(gè)規(guī)劃問(wèn)題,例如 員工排班、 學(xué)校時(shí)間表和云優(yōu)化。每個(gè)規(guī)劃問(wèn)題運(yùn)行 5 分鐘。日志記錄設(shè)置為INFO。基準(zhǔn)測(cè)試以 30 秒的 JVM 預(yù)熱(warm up)開(kāi)始,隨后丟棄。


  • 解決規(guī)劃問(wèn)題不涉及IO(除了在啟動(dòng)期間加載輸入的幾毫秒)。單個(gè)CPU完全飽和。它不斷地創(chuàng)建許多短期存在的對(duì)象,然后 GC 將它們收集起來(lái)。


  • 基準(zhǔn)衡量每秒計(jì)算的分?jǐn)?shù)數(shù)量,越高越好。為測(cè)試計(jì)劃規(guī)劃的解決方案計(jì)算分?jǐn)?shù)并非易事:它涉及許多計(jì)算,包括檢查每個(gè)實(shí)體與每個(gè)其他實(shí)體之間的沖突。



運(yùn)行次數(shù):每個(gè)JDK 和每個(gè)垃圾收集器組合按順序運(yùn)行 3 次。下面的結(jié)果是這 3 次運(yùn)行的平均值。



測(cè)試結(jié)果



Java 11 (LTS) 和 Java 16 與 Java 17 (LTS)



Java17,有史以來(lái)最快?JDK


表 1. 在不同 JDK 上使用 G1GC 的每秒計(jì)算得分



Java17,有史以來(lái)最快?JDK


Java17,有史以來(lái)最快?JDK


表 2. 在不同 JDK 上使用 ParallelGC 的每秒計(jì)算得分



Java17,有史以來(lái)最快?JDK




備注:



查看 3 次單獨(dú)運(yùn)行的原始數(shù)據(jù)(此處未顯示),機(jī)器重新分配數(shù)(B1 和 B10)在同一 JDK 和 GC 上的運(yùn)行之間波動(dòng)很大,通常超過(guò)10%,其他數(shù)字不會(huì)受到這種不可靠性的影響。



可以以說(shuō)忽略 Machine Reassignment numbers 更好。但是為了避免挑選數(shù)據(jù)的問(wèn)題,這些結(jié)果和平均值確實(shí)把它們包括進(jìn)來(lái)了。



Java 17 上的 G1GC 與 ParallelGC



Java17,有史以來(lái)最快?JDK


表 3.JDK 17 下不同 GC 每秒的計(jì)算得分



Java17,有史以來(lái)最快?JDK



基準(zhǔn)測(cè)試總結(jié)



  • 平均而言,以 OptaPlanner 為例的基準(zhǔn)測(cè)試結(jié)果表明:


  • 對(duì)于 G1GC(默認(rèn)),Java 17 比 Java 11 快 8.66%,比 Java 16 快 2.41%。


  • 對(duì)于 ParallelGC,Java 17 比 Java 11 快 6.54%,比 Java 16 快 0.37%。


  • Parallel GC 比 G1 GC 快 16.39%。



多說(shuō)一句



在基于 JDK 15 的基準(zhǔn)測(cè)試中,Java 15 比 Java 11 快 11.24%?,F(xiàn)在,Java 17 相對(duì)于 Java 11 的增益更少。這是否意味著 Java 17 比 Java 15 慢?



答案是否定的,Java 17 依然比 Java 15 快,因?yàn)橹暗哪切┗鶞?zhǔn)測(cè)試是在不同的代碼庫(kù)上運(yùn)行的(OptaPlanner 7.44 而不是 8.10)。不要拿橙子與蘋果作比較,不具有可比性。




3


結(jié)論


總而言之,JDK17 的性能表現(xiàn)還是非常值得升級(jí)的,至少于OptaPlanner Demo 而言。



此外,這些用例最快的垃圾收集器仍然是ParallelGC, 而不是G1GC(默認(rèn))。



作為3年后首次發(fā)布的LTS版本的Java 17給你帶來(lái)了哪些驚喜?面對(duì)Go、Kotlion等JVM的強(qiáng)勢(shì)發(fā)展,你覺(jué)得Java還能保持霸主地位嗎?






本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉