1. JDK21(LST)版本特性与下载准备
JDK21作为Oracle发布的长期支持版本(Long-Term Support),在2023年9月正式推出。这个版本特别值得开发者关注,因为它不仅包含了15个JEP(JDK Enhancement Proposals)新特性,还将获得至少5年的官方支持周期。对于生产环境而言,LTS版本意味着更稳定的运行表现和持续的安全更新。
在开始安装前,我们需要先完成下载准备工作。Oracle官方提供了多种获取JDK21的渠道:
-
Oracle官网下载(推荐):
- 访问Oracle JDK下载页面
- 在"Java SE 21"区域选择适合你操作系统的安装包
- 需要注册Oracle账户才能下载(免费)
-
OpenJDK镜像:
-
包管理器安装(适合Linux/macOS):
bash复制# Ubuntu/Debian sudo apt install openjdk-21-jdk # CentOS/RHEL sudo yum install java-21-openjdk-devel # macOS (Homebrew) brew install openjdk@21
注意:生产环境建议使用官方Oracle JDK或经过认证的OpenJDK构建,避免使用未经测试的第三方构建版本。
下载时需要注意区分安装包类型:
- Windows:提供.exe安装程序和.zip压缩包两种格式
- macOS:提供.pkg安装程序和.tar.gz压缩包
- Linux:提供.rpm和.deb包以及.tar.gz通用包
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Windows系统安装JDK21全流程
2.1 图形界面安装步骤
对于大多数Windows用户,推荐使用.exe安装程序,这是最简单的安装方式:
- 双击下载的jdk-21_windows-x64_bin.exe文件
- 在安装向导中点击"下一步"
- 选择安装路径(默认是C:\Program Files\Java\jdk-21)
- 等待安装进度完成
- 点击"关闭"完成安装
安装完成后,可以通过命令提示符验证:
cmd复制java -version
预期输出应类似:
code复制java version "21" 2023-09-19
Java(TM) SE Runtime Environment (build 21+35-LTS-2513)
Java HotSpot(TM) 64-Bit Server VM (build 21+35-LTS-2513, mixed mode, sharing)
2.2 手动配置环境变量
虽然新版JDK安装程序会自动设置部分环境变量,但为了确保所有开发工具都能正确定位JDK,建议手动配置:
- 右键"此电脑" → 属性 → 高级系统设置 → 环境变量
- 在系统变量中新建:
- 变量名:JAVA_HOME
- 变量值:C:\Program Files\Java\jdk-21 (你的实际安装路径)
- 编辑Path变量,添加:
- %JAVA_HOME%\bin
- %JAVA_HOME%\jre\bin
提示:在PowerShell中临时设置环境变量可以使用:
powershell复制$env:JAVA_HOME = "C:\Program Files\Java\jdk-21"
2.3 验证安装完整性
执行以下命令进行完整验证:
cmd复制javac -version
java -version
jshell --version
三个命令应分别输出JDK21对应的版本信息。如果出现"不是内部或外部命令"错误,说明环境变量配置有误。
3. Linux/macOS系统安装与配置
3.1 基于包管理器的安装
对于Debian/Ubuntu系统:
bash复制sudo apt update
sudo apt install -y openjdk-21-jdk
对于RHEL/CentOS系统:
bash复制sudo yum install java-21-openjdk-devel
对于macOS(使用Homebrew):
bash复制brew tap homebrew/cask-versions
brew install --cask temurin21
3.2 手动安装.tar.gz包
-
解压下载的压缩包:
bash复制
tar -xzf jdk-21_linux-x64_bin.tar.gz -C /opt -
设置环境变量(添加到~/.bashrc或~/.zshrc):
bash复制export JAVA_HOME=/opt/jdk-21 export PATH=$JAVA_HOME/bin:$PATH -
使配置生效:
bash复制source ~/.bashrc
3.3 多版本管理
使用alternatives工具管理多个JDK版本(Linux):
bash复制sudo update-alternatives --install /usr/bin/java java /opt/jdk-21/bin/java 2100
sudo update-alternatives --config java
macOS用户可以使用jenv工具:
bash复制brew install jenv
jenv add /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
jenv global 21
4. JDK21新特性与兼容性检查
4.1 重要新特性概览
JDK21引入了多项重要改进:
-
虚拟线程(正式版) - JEP 444
java复制Thread.startVirtualThread(() -> { System.out.println("Hello from virtual thread!"); }); -
分代ZGC - JEP 439
通过分代收集提升垃圾回收效率 -
记录模式 - JEP 440
java复制if (obj instanceof Point(int x, int y)) { System.out.println(x + y); } -
字符串模板(预览) - JEP 430
java复制String name = "Joan"; String info = STR."My name is \{name}";
4.2 兼容性检查要点
在升级到JDK21前,需要检查:
-
第三方库兼容性:
bash复制mvn dependency:tree | grep -E 'javax|jakarta' -
模块系统变化:
- 移除了部分已废弃的API
- 加强了模块访问控制
-
行为变更:
- TLS 1.0/1.1默认禁用
- 更强的封装机制
4.3 常见问题解决方案
问题1:运行旧项目时报错"java.lang.UnsupportedClassVersionError"
- 原因:项目使用更高版本JDK编译
- 解决方案:
bash复制javac --release 11 Source.java # 指定目标版本
问题2:IDE无法识别JDK21
- 解决方案:更新IDE到最新版本
- IntelliJ IDEA 2023.2+原生支持JDK21
- Eclipse需要安装Java 21支持插件
问题3:javafx.util.Pair兼容性
- JDK21中JavaFX已完全移除
- 需要单独添加JavaFX依赖:
xml复制<dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-base</artifactId> <version>21</version> </dependency>
5. 开发环境配置实战
5.1 主流IDE配置
IntelliJ IDEA:
- File → Project Structure → SDKs
- 点击"+" → 选择JDK21安装路径
- 在项目设置中选择JDK21为项目SDK
Eclipse:
- Window → Preferences → Java → Installed JREs
- 添加JDK21安装路径
- 项目右键 → Properties → Java Build Path → 选择JDK21
VS Code:
- 安装Java Extension Pack
- 设置"java.home": "/path/to/jdk-21"
- 重启VS Code生效
5.2 构建工具配置
Maven:
xml复制<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties>
Gradle:
groovy复制java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
5.3 容器化部署
Dockerfile示例:
dockerfile复制FROM eclipse-temurin:21-jdk-jammy
COPY target/myapp.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
构建并运行:
bash复制docker build -t myapp .
docker run -p 8080:8080 myapp
6. 性能调优与监控
6.1 JVM参数优化
JDK21推荐参数:
bash复制java -XX:+UseZGC -Xms512m -Xmx2g -jar app.jar
虚拟线程专用参数:
bash复制java -XX:+UseVirtualThreadScheduler -jar app.jar
6.2 监控工具
-
jcmd - 内置多功能工具
bash复制
jcmd <pid> VM.flags jcmd <pid> Thread.dump_to_file -format=json threads.json -
jconsole - 图形化监控
bash复制
jconsole -
新的诊断命令:
bash复制
jcmd <pid> GC.heap_dump filename=heap.hprof
6.3 生产环境建议
- 使用LTS版本(如JDK21)而非特性版本
- 定期检查Oracle关键补丁更新(CPU)
- 启用JFR(Java Flight Recorder)持续监控
bash复制
java -XX:StartFlightRecording=filename=recording.jfr,duration=60s -jar app.jar - 考虑使用CRaC(Coordinated Restore at Checkpoint)缩短启动时间
我在实际生产环境部署JDK21时发现,虚拟线程特别适合IO密集型微服务,但在使用时有几个注意点:
- 避免在虚拟线程中使用ThreadLocal大量存储数据
- synchronized块会阻塞载体线程,考虑改用ReentrantLock
- 线程池配置需要重新评估,通常可以大幅减少核心线程数
