《阿里巴巴 Java 版本升級實踐-董登輝.pdf》由會員分享,可在線閱讀,更多相關《阿里巴巴 Java 版本升級實踐-董登輝.pdf(43頁珍藏版)》請在三個皮匠報告上搜索。
1、阿里巴巴 Java 升級實踐阿里云智能高級技術專家/董登輝個人簡介2015 年畢業于北京科技大學,加入螞蟻金服國際事業部目前在阿里云基礎軟件編譯器團隊,負責 JVM RAS 方向負責的云產品:應用診斷分析平臺 ATPEclipse JIFA&Adoptium EMT4J Project LeadAlibaba Dragonwell JDK MaintainerOpenJDK Committer目錄Java 語言生態趨勢新版本特性升級工具內部實踐展望JDK 發布模型Time-based release model每 6 個月發布 1 個新版本,并維護 6 個月目前最新的版本是 22每兩年 1 個
2、 LTS 版本:8,11,17,21$FEATURE.$INTERIM.$UPDATE.$PATCHJEP 233,322JDK Vendors阿里巴巴,華為,騰訊Azul,亞馬遜,微軟,甲骨文,紅帽 廠商中立 Adoptium Eclipse TEnd of Life2023202520272029203120212019Dragonwell 8(2019.3-至少到 2026.6)Dragonwell 11(2019.12-至少到 2027.9)Dragonwell17(2021.11-至少到 2027.9)Dragonwell 21(2023.10-至少到 2029.11) Relic
3、Java 2023 生態報告8411046480335690%23%45%68%90%Java 8Java 11Java 17202020222023框架&庫框架&庫AI 場景JVector純 Java 實現的 vector 搜索引擎Vector APITornadoVM異構計算,讓 Java 程序運行在 GPU、FPGA 設備上JVMCI,Graal IR目錄Java 語言生態趨勢新版本特性升級工具內部實踐展望新特性分布Highlights運行時GC&內存CompilerRASThread Local HandshakeHelpful NPEApp CDSVirtual ThreadG1 優
4、化Generational ZGCShenandoahEpsilon GCElastic MetaspaceCompact StringSegment CodeCacheJVMCIVector APIIntrinsic 優化Unified LoggingStack Walking APIHeap ProfilingJFR Event Streaming平臺其他Linux/RISC-VAArch64模塊化jlinkMulti-Release JAR序列化安全加密算法https:/openjdk.org/jeps/0語法Structured ConcurrencyScoped ValueVirtu
5、al Thread傳統線程由 OS 進行調度,虛擬線程由 VM 調度百萬級別虛擬線程,虛擬線程不是資源回歸同步編程,可觀測性ThreadLocal vs ScopedValuesynchronized 中阻塞會導致 pinning,會在后續的版本中解決OS Thread 1OS Thread 2OS Thread NPlatform Thread 1Platform Thread 2Platform Thread NVirtual Thread 1Virtual Thread 2Virtual Thread 3Virtual Thread KForkJoinPoolGenerational Z
6、GCScalable(TB),Low-Latency(Pauses 1ms)Automatic Tuning,只需要設置-XmxLoad&Store Barrier,Colored Pointer-XX:+ZGenerational,引入分代機制提高性能性能數據YOHeapZHeapYOOYYYOYOVector API56786789SIMD+123423453579通過一套 API 表示向量計算顯示的數據并行,SIMD,跨平臺可以覆蓋自動向量化不能優化的場景仍在孵化中128-bit vectorVector API通過一套 API 表示向量計算顯示的數據并行,SIMD,跨平臺可以覆蓋自動向
7、量化不能優化的場景仍在孵化中基于 event 的 tracing 框架,內建于 JVM能夠收集全方位信息低開銷,默認開銷 1%Event Streaming APIContinuous ProfilingJava Flight RecorderHardwareOSJVMJDKApplicationJFRRepository.jfr.jfr.jfrjdk.ObjectAllocationInNewTLAB startTime=2022-09-27T06:32:41.349589116Z objectClass=byte(classLoader=null)allocationSize=262160
8、 tlabSize=262160 eventThread=Upload Handler(javaThreadId=14)stackTrace=java.util.Arrays.copyOf(byte,int)line:3537 java.io.ByteArrayOutputStream.ensureCapacity(int)line:100 java.io.ByteArrayOutputStream.write(byte,int,int)line:130 .Java Flight Recorder基于 event 的 tracing 框架,內建于 JVM能夠收集全方位信息低開銷,默認開銷 1%
9、Event Streaming APIContinuous Profiling目錄Java 語言生態趨勢新版本特性升級工具內部實踐展望升級一般流程準備新版本的 JDK根據需要使用新版本 JDK 編譯應用使用新版本 JDK 運行應用修復報錯:涉及代碼、依賴、配置等改造穩定性和性能驗證升級到 8 的方案升級指南兼容性問題較少主要關注安全相關問題項目改造成本小升級到 11+Oracle 提供了官方升級指南存在諸多兼容性問題8 到升級 11 是重災區對于復雜應用來說,成本很高讓所有應用開發人員直接參考升級指南不現實升級工具自動檢測并嘗試修復兼容性問題兼容性報告,Auto-fix patch規則驅動,易
10、于擴展靜態&運行時分析Maven 插件,CLI,Agent,APIMaven PluginCommand LineJava AgentAPIRule EngineDependency AnalysisStatic AnalysisCode TransformerReport GeneratorAutoFix ExecutorVersion Based Rule SetOpenRewrite Recipesi18n兼容性報告 mvn process-test-classes org.eclipse.emt4j:emt4j-maven-plugin:process-Dautofix=trueAut
11、oFix Patch mvn process-test-classes org.eclipse.emt4j:emt4j-maven-plugin:process-Dautofix=true開源2022 年在 Eclipse 社區開源作為 Eclipse Adoptium 的子項目Eclipse Migration Toolkit for JavaApache-2.0 L 語言生態趨勢新版本特性升級工具內部實踐展望概述成立專項小組,負責規劃和推進集團 Java 升級工作從核心電商業務開始,向其他 BU(ICBU、菜鳥等)推廣迭代完善升級指南,降低邊際成本在線的升級向導(基于 EMT4J)最佳實踐
12、SPECjbb2015 compositemax-JOPS 代表極限吞吐-Xms16g-Xmx16g-XX:+UseG1GCecs.g8i.2xlarge 8C32G性能100.00%106.57%114.75%115.77%0%20%40%60%80%100%120%max-jOPSTemurin 8.0.402Temurin 11.0.22Temurin 17.0.10Temurin 21.0.2兼容性問題模塊化引入的訪問可見性問題使用了被刪除或廢棄的 API 導致編譯期或運行時異常JavaEE 相關模塊被移除JRE 目錄被移除Maven 插件兼容性問題URLClassLoader 繼承結
13、構變化API 行為變化,如 Pattern#compile,CLDR二/三方依賴安全其他性能:CompactStrings 特性導致 CPU 上升,可通過-XX:-CompactStrings 關閉該特性Metaspace 內存增長Java 版本格式變化引起的代碼邏輯失效遠程調試一些 JDK 內置工具被刪除二方/三方庫兼容性治理內部制品倉庫通過 webhook 觸發兼容性掃描兼容性打標AutoFix 時決策目標版本兼容包包含部分常用的被刪除的 APISecurityManager#checkMemberAccessBASE64En/Decoder針對需要運行在不同版本上的代碼,提供中間層屏蔽兼
14、容性問題DirectBuffer#cleanerJade GC高吞吐分代無暫停 GC 算法支持壓縮指針對比 Shenandoah、ZGC 吞吐有顯著提升論文會在 EuroSys 2024 4月發表14,14912,25811,3718,5767,94221,45415,30813,5999,93124,29706,00012,00018,00024,00030,000JadeShenandoahG1critical-jOPSmax-jOPSSPECjbb20157764m heap,按 critical-jOPS 高低從左至右排序Compact Object HeadersProject Li
15、lliput-小人國-XX:+UseCompactObjectHeaders對象頭從 12 字節減少到 8 字節WIP:進一步減少到 4 字節已移植到了 Dragonwell 11,性能數據unused:26 bits,hash:31 bitsage:4bits and other 3narrow klass:32 bitspadding:32 bitslong:64 bitshash:25 bitsage:4bits and other 3narrow klass:32 bitslong:64 bitsLong 實例的 layout(-XX:+UseCompressedClassPointers)mark word進展阿里集團核心主體應用已全部升級到 JDK 11使用 CMS GC 應用切換到 G1 GC11 的應用數量規模:數千個17&21 應用數量規模:數百個針對歷史特性的支持,優先使用上游特性替代目錄Java 語言生態趨勢新版本特性升級工具內部實踐展望LangChain+LLM+EMT4J+OpenRewrite