升級JDK時涉及的工作任務

jackieathome發表於2024-08-08

JDK版本升級,通常引入新的語言特性、新的API,廢棄一些API,從而導致一些不相容的現象。
因此在升級產品使用的JDK版本時,通常有如下考慮:

  • 新產品包括新建設的專案以及剛啟動不久的專案,使用高版本的JDK。
  • 對於生命週期中間的產品,依據人力預算和團隊的技能,決策是否升級。
  • 對於進入生命週期尾部的產品,則建議維持現有的JDK版本,不進行升級工作。

升級JDK前,完整梳理涉及的變更項,有助於準確評估升級所需的工作量。
升級JDK時,提前就如下事項,進行評估:
升級JDK版本的目的
明確升級的目的,比如提升開發效率、改善應用執行時的效率、提升團隊技能準備度、客戶的明確要求等,有助於縮小備選的版本集合,快速做出選型的決策。
就升級目的和收益,和客戶、管理團隊、研發團隊統一認識,達成一致。

開發環境

  • IDE的選型,當前在用的低版本的IDE可能不支援高版本的JDK,因此需要同步更新版本。
  • 構建工具,比如專案當前使用maven來構建產品,部分外掛可能依賴JDK的版本,因此需要同步升級。
  • 靜態檢查工具,低版本的檢查工具可能無法識別高版本JDK引入的新語法,因此需要升級或者重新選型。
  • 除錯工具,比如記憶體檢查和分析工具、一些Profile的工具,可能需要同步升級或者重新選型。
  • UT用例,比如Mock框架,可能需要同步升級或者重新選型,這涉及到已有UT程式碼的整改。

構建流水線

  • 流水線軟體,比如Jenkins,統一JDK版本,有助於簡化環境的配置,同時複用升級JDK帶來的紅利。
  • 靜態檢查工具,和開發環境中使用的程式碼靜態工具的版本和規則需要匹配,二者同步升級。
  • 自動化測試用例

產品原始碼

  • 原始碼中涉及語言、API的相容性修改
  • 開源軟體,選用相容高版本JDK的版本,或者重新選型
  • 指令碼,比如安裝、解除安裝、啟動、停止指令碼等

驗證工作

  • 功能驗證
    • 安裝/解除安裝/執行/停止/升級/回退
    • 業務功能
  • 效能測試
    • 資源消耗,觀察CPU、記憶體
    • 業務表現,比如吞吐量、時延、併發度
    • JVM表現,比如GC次數、GC時延、GC日誌
  • 長穩測試

周邊配套系統
運營、運維等系統,和產品一起完成整改。

生產變更
提前演練,準備好應對預案。

完成上述梳理,算是好的開始,後續仍需制訂執行計劃,有序開展工作,跟蹤各任務的進度,在預期時間內完成升級的工作,達成升級的目標。

AI的答案

如下是百度生成的答案,質量還不錯,文筆、措辭的質量不錯。

‌JDK(‌Java Development Kit)的升級是一個涉及多個方面的過程,包括版本選擇、依賴更新、程式碼相容性檢查、測試以及查閱官方文件和社群支援。以下是一些關鍵的步驟和注意事項:
版本選擇

  • 推薦升級到最新穩定版本,如‌JDK 17,以利用最新的效能改進和安全更新。
  • 考慮專案的相容性和依賴庫的支援情況,確保所選版本與專案的需求相匹配。

依賴更新

  • 檢查專案依賴的庫是否支援新版本的JDK,並更新到相容的版本。特別注意那些有強制依賴的庫,如Zookeeper和Curator,它們可能需要特定版本的JDK才能正常工作。
  • 對於使用Maven或Gradle等構建工具的專案,更新專案的構建配置檔案(如pom.xml或build.gradle),指定新的JDK版本。

程式碼相容性檢查

  • 檢查程式碼中是否有使用已棄用或不再支援的API,並進行相應的修改。
  • 利用IDE的提示功能檢查潛在的相容性問題,並進行修復。

測試

  • 在升級後進行全面的測試,包括單元測試、整合測試和系統測試,確保功能不受影響。
  • 特別注意那些與JDK版本緊密相關的功能模組,如網路程式設計、併發處理等。

文件和社群支援

  • 查閱JDK官方文件和社群討論,獲取更多關於升級指導和常見問題的解決方案。
  • 利用社群論壇和問答網站(如Stack Overflow)尋求幫助和建議。

透過遵循上述步驟和建議,可以更順利地完成JDK的升級過程,同時最小化潛在的風險和問題。‌

參考資料

Oracle JDK

  • Java Downloads
  • Oracle JDK Migration Guide 22
  • Oracle JDK Migration Guide 21
  • Oracle JDK Migration Guide 17
  • Oracle JDK Releases for Java 11 and Later

OpenJDK

  • OpenJDK General-Availability Releases
  • Red Hat build of OpenJDK
  • JEPs in JDK 17 integrated since JDK 11
  • JEP 361: Switch Expressions
  • JEP 378: Text Blocks
  • JEP 394: Pattern Matching for instanceof
  • JEP 395: Records
  • JEP 409: Sealed Classes

開源軟體

  • Spring Framework Versions
  • Spring Boot

網友帖子

  • 我的一次分享——JDK17
  • JDK11升級JDK17最全實踐乾貨來了
  • How much faster is Java 17?
  • How much faster is Java 15?
  • How much faster is Java 11?
  • What is the fastest Garbage Collector in Java 8?
  • How much faster is Java 8?

相關文章