升级JDK时涉及的工作任务
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
开源软件
网友帖子
- 我的一次分享——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?
升级JDK时涉及的工作任务的更多相关文章
- 是时候考虑升级 JDK 17 了
Spring,作为 Java EE 的事实规范,在2022年11月16日发布了最新的 6.0.0 GA 版本.这个版本是框架后续新生代的初始版本,拥抱持续创新的 OpenJDK 和 Java 生态.新 ...
- AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式
AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. 从Subsonic到Entity Framework Subsonic最早发布 ...
- AppBox升级进行时 - 扁平化的权限设计
AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. AppBox v2.0中的权限实现 AppBox v2.0中权限管理中涉及三个 ...
- 整理eclipse,升级jdk环境小记录
这2天在整理项目: 需要把eclipse 32位,jdk1.6 32位的更改为eclipse 64位,jdk1.8 64位版本的,于是我就在一台window7的电脑上直接操作,遇到了一下几点问题,记录 ...
- jdk线程池ThreadPoolExecutor工作原理解析(自己动手实现线程池)(一)
jdk线程池ThreadPoolExecutor工作原理解析(自己动手实现线程池)(一) 线程池介绍 在日常开发中经常会遇到需要使用其它线程将大量任务异步处理的场景(异步化以及提升系统的吞吐量),而在 ...
- 配置JDK时环境变量path和JAVA_HOME的作用
1.PATH环境变量.作用是指定命令搜索路径,在i命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序.需要把jdk安装目录下的bin目录增 ...
- Centos6.7安装Pycharm及升级JDK
首先到pycharm官网下载pycharm压缩包 wget https://www.jetbrains.com/pycharm/download/download-thanks.html?platfo ...
- Linux 下升级JDK 1.7到1.8
1.下载1.8的jdk rpm文件到linux系统 2.执行rpm -ivh jdk-8u151-linux-x64.rpm 选项详解: -a:查询所有套件: -b<完成阶段><套件 ...
- IntelliJ IDEA14.1中java项目Maven中没有配置JDK时的问题
在IntelliJ IDEA 14.1中使用在java项目中使用Maven时当没有在Maven中配置JDK编译版本.源码版本时,IDEA将默认的编译版本.源码版本设置为jdk5. 在IDEA中Lang ...
- 复习做UWP时涉及到的几种加密签名相关
本人菜鸟一枚,大学里凭兴趣学了一点WP的皮毛,后来又幸运(或者不幸)的进了一家专注于Windows生态的公司做了一段时间的UWP.在博客园写点自己遇到的东西,作为分享,也作为自己的备忘,如果有错误的地 ...
随机推荐
- Luban小试牛刀
Luban小试牛刀 LubanUnity LubanUnity配置工具配置解决方案 简介 Github 文档 视频教程 Unity工具 个人感觉挺强大,便捷的,适合中大型游戏项目的配置工作.小 ...
- ansible(1)---师傅领进门
背景 在企业里,运维需要配合开发进行产品上架,说白了就是把写好的代码上服务器.那么,就会出现这样的问题:需要运维人员配置好系统,配置好环境,配置好网络,配置好程序,配置好所有所有的依赖环境. ...
- ZYNQ Linux使用SPI驱动
--- title: ZYNQ Linux使用SPI驱动 EntryName: xilinx-zynq-using-spi-driver-in-linux date: 2020-10-14 10:02 ...
- Coap 协议学习:具体协议介绍具体
协议框架 CoAP默认运行在UDP上,但它也支持运行在SMS,TCP等数据传输层上.本文主要是基于UDP上的CoAP协议介绍 1.消息模型 Messages COAP协议通信是通过在UDP上传输消息类 ...
- 国产RK3568J基于FSPI的ARM+FPGA通信方案分享
近年来,随着中国新基建.中国制造 2025 规划的持续推进,单 ARM 处理器越来越难胜任工业现场的功能要求,特别是如今能源电力.工业控制.智慧医疗等行业,往往更需要 ARM + FPGA 架构的处理 ...
- Git ignore 忽略文件不起作用
前提:拉取了项目上的代码,或者自己本地已经提交过了的文件.然后在 .gitignore 文件中添加了过滤,但是不管用,还是可以追踪 解决方案: 1.先删除本地的文件(可以备份到其他文件夹外) 2.然后 ...
- Linux启动Java程序jar包Shell脚本
手动方式启动和终止java程序 启动java程序jar:nohup java -jar XXX.jar 查看程序占用pid:ps -ef | grep XXX.jar 或 jps jps是jdk提供的 ...
- Spring学习篇
什么是Spring? Spring是一个轻量级的IoC和AOP容器框架.是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求. 常见的配置方式 ...
- FairMOT复现报错存档
FairMOT复现 使用pip命令单独安装Cython包即可 修改下载的cython-bbox包里的setup.py里的代码 将#extra_compile_args=['-Wno-cpp'], 修改 ...
- supervisor.conf部署及维护
启动服务 supervisord -c /etc/supervisord.conf 启动服务 supervisorctl start 关闭服务 supervisorctl stop