国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

JDK從8升級到21的問題集

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2025-06-06 16:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、背景與挑戰

1.升級動因

?Oracle長期支持策略

?現代特性需求:協程、模式匹配、ZGC等

?安全性與性能的需求

?AI新技術引入的版本要求

2.項目情況

?100+項目并行升級的協同作戰

?多技術棧并存

?持續集成體系的適配挑戰

?

二、進度

應用總數 已完成 應用下線 待升級
100+ 73 13 10+

?

三、主要問題域與解決方案

1. 依賴管理的"蝴蝶效應"

?sun.misc.BASE64Encoder等內部API廢棄 → 引發編譯錯誤

?JAXB/JAX-WS從JDK核心剝離 → XML處理鏈斷裂

?Lombok與新版編譯器兼容性問題(尤其record類型)

核心原因在于JEP320提案:https://openjdk.org/jeps/320?

?

案例1:歷史SDK的編譯陷阱

Compilation failure: Compilation failure:
#14 4.173 [ERROR] 不再支持源選項 6。請使用 8 或更高版本。
#14 4.173 [ERROR] 不再支持目標選項 6。請使用 8 或更高版本。



    org.apache.maven.plugins
    maven-compiler-plugin
    3.5
    
        1.6
        1.6
    



    org.apache.maven.plugins
    maven-compiler-plugin
    3.13.0
    
        8
    


運行 HTML

案例2:JAXB的模塊化剝離

javax.xml.bind.JAXBException:Implementation of JAXB-API has not been found


    org.glassfish.jaxb
    jaxb-runtime
    4.0.5


案例3:Lombok與新版編譯器兼容性問題

java: java.lang.NoSuchFieldError


 org.projectlombok
 lombok
 1.18.30


案例4:Resource注解找不到

Caused by: java.lang.NoSuchMethodError: 'java.lang.String javax.annotation.Resource.lookup()'
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.(CommonAnnotationBeanPostProcessor.java:664)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.lambda$buildResourceMetadata$0(CommonAnnotationBeanPostProcessor.java:395)
at org.springframework.util.ReflectionUtils.doWithLocalFields(ReflectionUtils.java:669)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.buildResourceMetadata(CommonAnnotationBeanPostProcessor.java:377)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.findResourceMetadata(CommonAnnotationBeanPostProcessor.java:358)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:306)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1116)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
... 37 more


    jakarta.annotation
    jakarta.annotation-api
    1.3.5



    javax.annotation
    javax.annotation-api
    1.3.2


上述兩個依賴代碼基本一樣,推薦使用該版本:

jakarta.annotation:jakarta.annotation-api。

?

2. 模塊化的破與立

反射訪問的模塊墻

[ERROR] Unable to make field private int java.text.SimpleDateFormat.serialVersionOnStream accessible

# 啟動參數添加模塊開放配置
--add-opens java.base/java.text=ALL-UNNAMED
--add-opens java.base/java.lang.reflect=ALL-UNNAMED

完整模塊開放配置模板

export JAVA_OPTS="-Djava.library.path=/usr/local/lib -server -Xmx4096m --add-opens java.base/sun.security.action=ALL-UNNAMED
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.math=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/sun.util.calendar=ALL-UNNAMED
--add-opens java.base/java.util.concurrent=ALL-UNNAMED
--add-opens java.base/java.util.concurrent.locks=ALL-UNNAMED
--add-opens java.base/java.security=ALL-UNNAMED
--add-opens java.base/jdk.internal.loader=ALL-UNNAMED
--add-opens java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.base/sun.nio.ch=ALL-UNNAMED
--add-opens java.management/java.lang.management=ALL-UNNAMED
--add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED
--add-opens java.management/sun.management=ALL-UNNAMED
--add-opens java.base/sun.security.action=ALL-UNNAMED
--add-opens java.base/sun.net.util=ALL-UNNAMED
--add-opens java.base/java.time=ALL-UNNAMED
--add-opens java.base/java.lang.reflect=ALL-UNNAMED
--add-opens java.base/java.io=ALL-UNNAMED"

3. 語法層面的"時空穿越"

案例1:Base64編解碼改造

// JDK8寫法(已廢棄)
BASE64Encoder encoder =newBASE64Encoder();
String encoded = encoder.encode(data);
// JDK21規范寫法
Base64.Encoder encoder =Base64.getEncoder();
String encoded = encoder.encodeToString(data);

案例2:日期序列化問題

Caused by:java.lang.reflect.InaccessibleObjectException: 
Unable to make field private int java.text.SimpleDateFormat.serialVersionOnStream accessible

解決方案

1.使用DateTimeFormatter替代SimpleDateFormat

2.或添加模塊開放參數:--add-opens java.base/java.text=ALL-UNNAMED

?

4. 隱秘的"依賴戰爭"

注解包沖突典型案例

[ERROR] javax.annotation.Resource exists in both 
jsr250-api-1.0.jar and jakarta.annotation-api-1.3.5.jar



    jakarta.annotation
    jakarta.annotation-api
    2.1.1



    
        javax.annotation
        jsr250-api
    


5. 構建體系的改造

Maven插件兼容性問題

[ERROR] The plugin org.apache.maven.plugins:maven-compiler-plugin:3.13.0 
requires Maven version 3.6.3

升級策略

1.升級Maven版本

2.統一插件版本


    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.13.0
            
            
                org.apache.maven.plugins
                maven-war-plugin
                3.4.0
            
        
    


四、最佳實踐總結

1. 本地編譯

第一步:在本地進行編譯,提前識別出語法錯誤、版本沖突及不兼容問題。

主要有以下幾種場景:

Base64:參照 【Base64編解碼改造】

lombok:升級版本

jsr250、jaxb-runtime、jakarta.annotation-api:參照 【注解包沖突典型案例】

maven-compiler-plugin:升級版本

maven-resources-plugin:升級版本

maven-war-plugin:升級版本

?

?

2. 行云構建

同【本地編譯】

?

3. 行云部署

a、鏡像不匹配:自定義鏡像或者使用已申請的jdk21鏡像

b、module權限不夠:參照【完整模塊開放配置模板

c、JDSecurity加解密

所有數據庫操作:important.properties配置文件的處理方式

classpath:important.properties 使用PropertyPlaceholderConfigurer進行處理,不要用JDSecurityPropertyFactoryBean。


-->
-->
-->

?

4. 運行

a、序列化異常

jdk21使用列表視圖作為入參,導致jsf接口進行反序列化報錯。報錯代碼如下:

List subList = venderCodes.subList(i * batchSize, Math.min(venderCodes.size(), (i + 1) * batchSize));
VendorQueryVo vendorQueryVo = new VendorQueryVo();
vendorQueryVo.setVendorCodes(subList);
// 該接口最多支持100條調用
List batchVendorNameByVendorCode = vendorBaseInfoService.getBatchVendorNameByVendorCode(vendorQueryVo, I18NParamFactory.getJDI18nParam());

將 vendorQueryVo.setVendorCodes(subList) 修改為vendorQueryVo.setVendorCodes(new ArrayList<>(subList)) 即可解決問題

?

b、線程上下文類找不到:使用多線程場景下盡可能使用顯式指定線程池【默認情況下 不同運行環境的處理機制不同】

?

?

5. JVM調優

垃圾回收調優

UseParallelGC、UseG1GC和UseZGC是 Java 虛擬機(JVM)中三種不同的垃圾回收器(Garbage Collector, GC),它們的設計目標和使用場景有所不同。以下是它們的區別:

特性 UseParallelGC UseG1GC UseZGC
設計目標 高吞吐量 平衡吞吐量和延遲 極低延遲
暫停時間 較長 較短 極短
適用堆大小 中小堆(幾 GB 到幾十 GB) 大堆(幾十 GB 到幾百 GB) 超大堆(TB 級別)
CPU 消耗 中等 中等 較高
適用場景 批處理、計算密集型任務 對延遲有一定要求的應用 對延遲極其敏感的應用

?如果你的應用對吞吐量要求高,且可以接受較長的暫停時間,選擇UseParallelGC

?如果你的應用對延遲有一定要求,且堆內存較大,選擇UseG1GC

?如果你的應用對延遲極其敏感,且堆內存非常大,選擇UseZGC

僅供參考,具體請按照實際情況來進行調整。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JDK
    JDK
    +關注

    關注

    0

    文章

    83

    瀏覽量

    17146
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    為什么OCPP充電樁Security Profile要升級到2/3?

    現在新建或改造充電樁時,一般不再允許只停留在OCPP1.6的SecurityProfile0/1,要求升級到Profile2/3,核心原因可以歸納為“合規+安全+運營風險”三方面。深圳惠志科技推出
    的頭像 發表于 03-02 17:40 ?1052次閱讀
    為什么OCPP充電樁Security Profile要<b class='flag-5'>升級到</b>2/3?

    嵌入式入門必看!迅為RK3568?V2.0升級,新手也能輕松玩轉

    嵌入式入門必看!迅為RK3568?V2.0升級,新手也能輕松玩轉
    的頭像 發表于 10-28 13:26 ?435次閱讀
    嵌入式入門必看!迅為RK3568?V2.0<b class='flag-5'>升級</b>,新手也能輕松玩轉

    V5.0.0 ps 打印顯示線程 error 狀態全為 EINTRPT,,為什么?

    最近我將RTT版本升級了一下,4.1.1升級到5.0.0,運行時通過控制臺 ps之指令觀察,發現線程 error 都報 EINTRPT, 但 4.1.1 時都是 OK. 以下是 RTT 為 4.1.1 時的 ps 反饋 以下
    發表于 10-13 06:46

    明遠智睿RK3568核心板如何助力工業4.0升級

    汽車工廠效率提升30%看:明遠智睿RK3568核心板如何助力工業4.0升級 工業4.0的核心在于通過智能化技術實現生產效率的提升與生產模式的變革,而核心元器件作為工業設備的“心臟”,其性能直接影響
    的頭像 發表于 09-04 17:42 ?839次閱讀

    “代步工具”“智能伙伴”,存儲如何支撐汽車升級之路

    我們手里的手機,功能機“飛升”智能機,經歷了幾個關鍵階段: 第一步,是交互方式的革新——按鍵觸摸大屏,讓操作更直觀流暢; 第二步,是軟件系統的
    的頭像 發表于 08-21 16:36 ?725次閱讀
    <b class='flag-5'>從</b>“代步工具”<b class='flag-5'>到</b>“智能伙伴”,存儲如何支撐汽車<b class='flag-5'>升級</b>之路

    400G 升級到 800G,到底能省多少錢?(洞察 TCO 真相)

    ?覺得800G光模塊采購價高?本文揭示400G升級800G的驚人TCO節省:硬件總成本降25%,每Gbps電費省30%,運維效率提30%,空間占用減半!3年總體擁有成本直降30%+,遠超初期投入。算清這筆賬,升級800G不再是
    的頭像 發表于 08-11 10:39 ?899次閱讀

    ModbusProfinet:功率表通信升級的技術挑戰與解決方案

    在制造行業的自動化升級浪潮中,如何將車間里大量仍在服役的Modbus功率表,經濟高效地接入全新的Profinet工業以太網中?這不僅是技術選型題,更是考驗工程師智慧的實踐題。本文將為您剖析這一升級
    的頭像 發表于 08-04 14:49 ?537次閱讀
    <b class='flag-5'>從</b>Modbus<b class='flag-5'>到</b>Profinet:功率表通信<b class='flag-5'>升級</b>的技術挑戰與解決方案

    訊飛星火X1升級版正式上線

    今天,基于全國產算力訓練的深度推理大模型——訊飛星火X1升級版正式上線。
    的頭像 發表于 07-30 14:12 ?2043次閱讀
    訊飛星火X1<b class='flag-5'>升級</b>版正式上線

    STM32MP157d linux5.4.31升級到6.1.82無法啟動怎么解決?

    我以前一直使用linux5.4.31,只使用了TFA沒有optee uboot是2020版本。一直用得好好的 上個禮拜我想升級到6.1.82(主要想打RT linux patch, 看到STM有出
    發表于 06-10 07:31

    STM32MP157d linux5.4.31升級到6.1.82無法啟動怎么解決?

    我以前一直使用linux5.4.31,只使用了TFA沒有optee uboot是2020版本。一直用得好好的 上個禮拜我想升級到6.1.82(主要想打RT linux patch, 看到STM有出
    發表于 06-06 06:42

    STM32MP157d linux5.4.31升級到6.1.82無法啟動怎么解決?

    我以前一直使用linux5.4.31,只使用了TFA沒有optee uboot是2020版本。一直用得好好的 上個禮拜我想升級到6.1.82(主要想打RT linux patch, 看到STM有出
    發表于 05-21 06:20

    XT大升級 加量不加價|Amass LC2.0升級版新品連接器破界而來

    Amass第四代低壓新能源設備專用內接連接器——LC2.0升級版新品,即將上市,專治行業“頑疾”,四大顛覆性升級,讓松脫、虛焊、燒機、震動失效成為過去式!
    的頭像 發表于 04-29 14:42 ?1423次閱讀
    XT大<b class='flag-5'>升級</b> 加量不加價|Amass LC2.0<b class='flag-5'>升級</b>版新品連接器破界而來

    STM32MP157d linux5.4.31升級到6.1.82無法啟動的原因?

    我以前一直使用linux5.4.31,只使用了TFA沒有optee uboot是2020版本。一直用得好好的 上個禮拜我想升級到6.1.82(主要想打RT linux patch, 看到STM有出
    發表于 04-27 06:30

    6.12.1升級到6.13老是閃退是什么原因導致的?

    6.12.1升級到6.13老是閃退,回到6.12.1又正常,問一下大家是什么原因導致,有什么解決辦法?
    發表于 03-11 08:13

    win7 64位系統STM32CubeMX安裝完成后數據包無法升級到最新版本,怎么解決?

    win7 64位系統 STM32CubeMX安裝完成后數據包無法安裝,安裝較低版本后又無法升級到最新版本,這個界面出現閃退,無法輸入用戶名和密碼,導致無法升級。也試過下載STM32Cube FW
    發表于 03-10 07:04