chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

JDK從8升級(jí)到21的問(wèn)題集

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

掃碼添加小助手

加入工程師交流群

一、背景與挑戰(zhàn)

1.升級(jí)動(dòng)因

?Oracle長(zhǎng)期支持策略

?現(xiàn)代特性需求:協(xié)程、模式匹配、ZGC等

?安全性與性能的需求

?AI新技術(shù)引入的版本要求

2.項(xiàng)目情況

?100+項(xiàng)目并行升級(jí)的協(xié)同作戰(zhàn)

?多技術(shù)棧并存

?持續(xù)集成體系的適配挑戰(zhàn)

?

二、進(jìn)度

應(yīng)用總數(shù) 已完成 應(yīng)用下線 待升級(jí)
100+ 73 13 10+

?

三、主要問(wèn)題域與解決方案

1. 依賴管理的"蝴蝶效應(yīng)"

?sun.misc.BASE64Encoder等內(nèi)部API廢棄 → 引發(fā)編譯錯(cuò)誤

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

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

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

?

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

Compilation failure: Compilation failure:
#14 4.173 [ERROR] 不再支持源選項(xiàng) 6。請(qǐng)使用 8 或更高版本。
#14 4.173 [ERROR] 不再支持目標(biāo)選項(xiàng) 6。請(qǐng)使用 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
    


運(yùn)行 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與新版編譯器兼容性問(wèn)題

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


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

jakarta.annotation:jakarta.annotation-api。

?

2. 模塊化的破與立

反射訪問(wèn)的模塊墻

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

# 啟動(dòng)參數(shù)添加模塊開(kāi)放配置
--add-opens java.base/java.text=ALL-UNNAMED
--add-opens java.base/java.lang.reflect=ALL-UNNAMED

完整模塊開(kāi)放配置模板

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. 語(yǔ)法層面的"時(shí)空穿越"

案例1:Base64編解碼改造

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

案例2:日期序列化問(wèn)題

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

解決方案

1.使用DateTimeFormatter替代SimpleDateFormat

2.或添加模塊開(kāi)放參數(shù):--add-opens java.base/java.text=ALL-UNNAMED

?

4. 隱秘的"依賴戰(zhàn)爭(zhēng)"

注解包沖突典型案例

[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. 構(gòu)建體系的改造

Maven插件兼容性問(wèn)題

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

升級(jí)策略

1.升級(jí)Maven版本

2.統(tǒng)一插件版本


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


四、最佳實(shí)踐總結(jié)

1. 本地編譯

第一步:在本地進(jìn)行編譯,提前識(shí)別出語(yǔ)法錯(cuò)誤、版本沖突及不兼容問(wèn)題。

主要有以下幾種場(chǎng)景:

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

lombok:升級(jí)版本

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

maven-compiler-plugin:升級(jí)版本

maven-resources-plugin:升級(jí)版本

maven-war-plugin:升級(jí)版本

?

?

2. 行云構(gòu)建

同【本地編譯】

?

3. 行云部署

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

b、module權(quán)限不夠:參照【完整模塊開(kāi)放配置模板

c、JDSecurity加解密

所有數(shù)據(jù)庫(kù)操作:important.properties配置文件的處理方式

classpath:important.properties 使用PropertyPlaceholderConfigurer進(jìn)行處理,不要用JDSecurityPropertyFactoryBean。


-->
-->
-->

?

4. 運(yùn)行

a、序列化異常

jdk21使用列表視圖作為入?yún)?,?dǎo)致jsf接口進(jìn)行反序列化報(bào)錯(cuò)。報(bào)錯(cuò)代碼如下:

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

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

?

b、線程上下文類找不到:使用多線程場(chǎng)景下盡可能使用顯式指定線程池【默認(rèn)情況下 不同運(yùn)行環(huán)境的處理機(jī)制不同】

?

?

5. JVM調(diào)優(yōu)

垃圾回收調(diào)優(yōu)

UseParallelGC、UseG1GC和UseZGC是 Java 虛擬機(jī)(JVM)中三種不同的垃圾回收器(Garbage Collector, GC),它們的設(shè)計(jì)目標(biāo)和使用場(chǎng)景有所不同。以下是它們的區(qū)別:

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

?如果你的應(yīng)用對(duì)吞吐量要求高,且可以接受較長(zhǎng)的暫停時(shí)間,選擇UseParallelGC。

?如果你的應(yīng)用對(duì)延遲有一定要求,且堆內(nèi)存較大,選擇UseG1GC

?如果你的應(yīng)用對(duì)延遲極其敏感,且堆內(nèi)存非常大,選擇UseZGC。

僅供參考,具體請(qǐng)按照實(shí)際情況來(lái)進(jìn)行調(diào)整。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JDK
    JDK
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式入門必看!迅為RK3568?V2.0升級(jí),新手也能輕松玩轉(zhuǎn)

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

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

    最近我將RTT版本升級(jí)了一下,4.1.1升級(jí)到5.0.0,運(yùn)行時(shí)通過(guò)控制臺(tái) ps之指令觀察,發(fā)現(xiàn)線程 error 都報(bào) EINTRPT, 但 4.1.1 時(shí)都是 OK. 以下是 RTT 為 4.1.1 時(shí)的 ps 反饋 以下
    發(fā)表于 10-13 06:46

    明遠(yuǎn)智睿RK3568核心板如何助力工業(yè)4.0升級(jí)

    汽車工廠效率提升30%看:明遠(yuǎn)智睿RK3568核心板如何助力工業(yè)4.0升級(jí) 工業(yè)4.0的核心在于通過(guò)智能化技術(shù)實(shí)現(xiàn)生產(chǎn)效率的提升與生產(chǎn)模式的變革,而核心元器件作為工業(yè)設(shè)備的“心臟”,其性能直接影響
    的頭像 發(fā)表于 09-04 17:42 ?729次閱讀

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

    ?覺(jué)得800G光模塊采購(gòu)價(jià)高?本文揭示400G升級(jí)800G的驚人TCO節(jié)省:硬件總成本降25%,每Gbps電費(fèi)省30%,運(yùn)維效率提30%,空間占用減半!3年總體擁有成本直降30%+,遠(yuǎn)超初期投入。算清這筆賬,升級(jí)800G不再是
    的頭像 發(fā)表于 08-11 10:39 ?767次閱讀

    ModbusProfinet:功率表通信升級(jí)的技術(shù)挑戰(zhàn)與解決方案

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

    訊飛星火X1升級(jí)版正式上線

    今天,基于全國(guó)產(chǎn)算力訓(xùn)練的深度推理大模型——訊飛星火X1升級(jí)版正式上線。
    的頭像 發(fā)表于 07-30 14:12 ?1940次閱讀
    訊飛星火X1<b class='flag-5'>升級(jí)</b>版正式上線

    STM32MP157d linux5.4.31升級(jí)到6.1.82無(wú)法啟動(dòng)怎么解決?

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

    STM32MP157d linux5.4.31升級(jí)到6.1.82無(wú)法啟動(dòng)怎么解決?

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

    STM32MP157d linux5.4.31升級(jí)到6.1.82無(wú)法啟動(dòng)怎么解決?

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

    XT大升級(jí) 加量不加價(jià)|Amass LC2.0升級(jí)版新品連接器破界而來(lái)

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

    STM32MP157d linux5.4.31升級(jí)到6.1.82無(wú)法啟動(dòng)的原因?

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

    6.12.1升級(jí)到6.13老是閃退是什么原因?qū)е碌模?/a>

    6.12.1升級(jí)到6.13老是閃退,回到6.12.1又正常,問(wèn)一下大家是什么原因?qū)е?,有什么解決辦法?
    發(fā)表于 03-11 08:13

    win7 64位系統(tǒng)STM32CubeMX安裝完成后數(shù)據(jù)包無(wú)法升級(jí)到最新版本,怎么解決?

    win7 64位系統(tǒng) STM32CubeMX安裝完成后數(shù)據(jù)包無(wú)法安裝,安裝較低版本后又無(wú)法升級(jí)到最新版本,這個(gè)界面出現(xiàn)閃退,無(wú)法輸入用戶名和密碼,導(dǎo)致無(wú)法升級(jí)。也試過(guò)下載STM32Cube FW
    發(fā)表于 03-10 07:04

    在Ubuntu16.04上版本2020.1 OpenVINO?升級(jí)到2021.4.2之后不兼容怎么解決?

    OpenVINO? 2020.1 成功構(gòu)建自定義庫(kù)。 升級(jí)至 OpenVINO? 2021.4.2,并重新構(gòu)建自定義庫(kù)。 加載自定義庫(kù)時(shí)收到錯(cuò)誤: /src/.build.linux
    發(fā)表于 03-05 10:00

    DLPC3478如何安全的裁剪DLPC firmware Img文件?

    平臺(tái): DLPC3478 + DMD3010LC 想通過(guò)IIC來(lái)講V8.0.0.1升級(jí)到V9.0.0.1. 但通過(guò)IIC需要將近6分鐘完成Flash的升級(jí) 請(qǐng)問(wèn)能否通過(guò)DLP EVM GUI
    發(fā)表于 02-17 06:54