Ubuntu 22.04安装Java指南:OpenJDK与Oracle JDK配置

📅 2026/7/18 6:32:08 👁️ 阅读次数 📝 编程学习
Ubuntu 22.04安装Java指南:OpenJDK与Oracle JDK配置

1. Ubuntu 22.04 安装 Java 的必要性与版本选择

在 Ubuntu 22.04 上安装 Java 是许多开发者和系统管理员的基础工作。作为目前最流行的 LTS 版本,Ubuntu 22.04 默认并不包含完整的 Java 运行时环境,这使得手动安装成为必要步骤。Java 在 Ubuntu 上的安装主要有两种主流选择:OpenJDK 和 Oracle JDK。

OpenJDK 是 Java 的开源实现,完全免费且更新及时。它由社区维护,遵循 GPL 许可证,是大多数 Linux 发行版的默认选择。相比之下,Oracle JDK 是 Oracle 公司的商业实现,虽然功能上与 OpenJDK 基本一致,但在许可协议和使用条款上有更多限制。对于个人开发者和小型项目,OpenJDK 通常是更好的选择。

Java 版本方面,目前主要有以下几个重要版本需要考虑:

  • Java 8:虽然已经较老,但仍有大量遗留系统在使用
  • Java 11:当前的长期支持(LTS)版本
  • Java 17:最新的 LTS 版本
  • Java 21:最新的非 LTS 版本

提示:对于生产环境,建议选择 LTS 版本以获得长期支持。开发环境可以考虑使用最新版本体验新特性。

2. 通过 APT 安装 OpenJDK

2.1 安装默认 JRE/JDK

最简单的安装方式是使用 Ubuntu 的包管理器 apt。以下命令会安装当前 Ubuntu 仓库中默认的 OpenJDK 版本:

sudo apt update sudo apt install default-jre # 安装 Java 运行时环境(JRE) sudo apt install default-jdk # 安装 Java 开发工具包(JDK)

安装完成后,可以通过以下命令验证安装:

java -version javac -version # 如果安装了JDK

2.2 安装特定版本 OpenJDK

如果需要安装特定版本的 OpenJDK,可以使用以下格式的命令:

sudo apt install openjdk-11-jdk # 安装 Java 11 JDK sudo apt install openjdk-17-jre # 安装 Java 17 JRE

Ubuntu 22.04 仓库中通常包含多个 Java 版本,可以通过以下命令查看可用版本:

apt search openjdk | grep jdk

2.3 管理多个 Java 版本

当系统中安装了多个 Java 版本时,可以使用 update-alternatives 工具来管理默认版本:

sudo update-alternatives --config java sudo update-alternatives --config javac

这会显示一个交互式菜单,让你选择系统默认使用的 Java 版本。

3. 手动安装 Oracle JDK

3.1 下载 Oracle JDK

虽然 OpenJDK 在大多数情况下已经足够,但某些特定场景可能需要使用 Oracle JDK。安装步骤如下:

  1. 访问 Oracle 官方网站下载所需版本的 JDK
  2. 选择 Linux x64 的 .tar.gz 包
  3. 接受许可协议并下载

3.2 安装 Oracle JDK

下载完成后,执行以下步骤:

sudo mkdir /usr/local/java sudo tar -xzf jdk-17_linux-x64_bin.tar.gz -C /usr/local/java/

然后设置环境变量,编辑 ~/.bashrc 文件,添加以下内容:

export JAVA_HOME=/usr/local/java/jdk-17.0.1 export PATH=$JAVA_HOME/bin:$PATH

使更改生效:

source ~/.bashrc

3.3 验证 Oracle JDK 安装

java -version

应该显示类似如下的输出:

java version "17.0.1" 2021-10-19 LTS Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39) Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing)

4. 环境变量配置与优化

4.1 设置 JAVA_HOME

许多 Java 应用需要 JAVA_HOME 环境变量。可以通过以下方式设置:

echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" >> ~/.bashrc source ~/.bashrc

4.2 内存配置调整

对于需要大量内存的 Java 应用,可以调整 JVM 内存参数。编辑 /etc/environment 文件:

JAVA_OPTS="-Xms512m -Xmx2g"

4.3 默认时区设置

Java 默认可能使用系统时区,如果需要强制指定:

sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

5. 常见问题与解决方案

5.1 版本冲突问题

当系统中存在多个 Java 版本时,可能会出现版本混乱。解决方法:

sudo update-alternatives --remove-all java sudo update-alternatives --remove-all javac

然后重新配置默认版本。

5.2 证书问题

某些 Java 应用可能遇到 SSL 证书问题,解决方法:

sudo apt install ca-certificates-java sudo update-ca-certificates -f

5.3 图形界面问题

在无头服务器上运行 Java 图形程序可能报错,解决方法:

export DISPLAY=:0

或者安装虚拟帧缓冲:

sudo apt install xvfb

6. 性能调优与监控

6.1 JVM 参数优化

根据应用需求调整 JVM 参数:

java -XX:+UseG1GC -Xms1g -Xmx4g -jar your_application.jar

6.2 监控 Java 进程

使用 jps 查看 Java 进程:

jps -l

使用 jstat 监控 JVM 统计信息:

jstat -gcutil <pid> 1000

6.3 内存分析

生成堆转储文件:

jmap -dump:format=b,file=heap.hprof <pid>

使用 jhat 分析堆转储:

jhat heap.hprof

7. 开发环境配置

7.1 IDE 支持

对于使用 IntelliJ IDEA 或 Eclipse 的开发者,确保 IDE 使用正确的 JDK 版本。在 IntelliJ 中:

  1. 打开 File → Project Structure
  2. 在 SDKs 部分添加已安装的 JDK 路径
  3. 为项目选择正确的 SDK

7.2 构建工具配置

对于 Maven 项目,可以在 pom.xml 中指定 Java 版本:

<properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties>

对于 Gradle 项目,在 build.gradle 中配置:

java { toolchain { languageVersion = JavaLanguageVersion.of(17) } }

7.3 容器化部署

在 Docker 中使用 Java 的示例 Dockerfile:

FROM eclipse-temurin:17-jdk-jammy WORKDIR /app COPY target/myapp.jar . CMD ["java", "-jar", "myapp.jar"]

8. 安全配置与更新

8.1 定期更新

保持 Java 更新很重要,可以通过以下命令更新:

sudo apt update sudo apt upgrade

8.2 安全配置

编辑 java.security 文件(通常位于 $JAVA_HOME/conf/security/)来调整安全设置:

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \ DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL

8.3 审计 Java 应用

使用 jdeps 分析依赖:

jdeps --jdk-internals your_application.jar

9. 卸载 Java

如果需要卸载 Java,可以使用以下命令:

对于 OpenJDK:

sudo apt remove --purge openjdk-* sudo apt autoremove

对于 Oracle JDK:

sudo rm -rf /usr/local/java/

然后清理环境变量设置。

10. 实际应用案例

10.1 Spring Boot 应用部署

典型的 Spring Boot 应用启动命令:

java -Dserver.port=8080 -Dspring.profiles.active=prod -jar app.jar

10.2 Tomcat 配置

设置 Tomcat 使用的 Java 版本,编辑 catalina.sh:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export CATALINA_OPTS="-Xms512m -Xmx1024m"

10.3 微服务架构

在微服务架构中,可以为不同服务配置不同的 JVM 参数:

# 用户服务 java -Xms256m -Xmx512m -jar user-service.jar # 订单服务 java -Xms512m -Xmx1g -jar order-service.jar

11. 高级主题

11.1 使用 JLink 创建自定义运行时

Java 9 引入了 jlink 工具,可以创建自定义的 Java 运行时:

jlink --module-path $JAVA_HOME/jmods --add-modules java.base,java.logging --output myruntime

11.2 使用 JShell 进行交互式编程

Java 9 引入了 JShell,一个交互式 REPL 环境:

jshell

11.3 记录 JVM 日志

启用 JVM 日志记录:

java -Xlog:gc*,safepoint:file=gc.log:time,uptime,level,tags:filecount=5,filesize=1m -jar app.jar

12. 性能测试与基准

12.1 使用 JMH 进行微基准测试

JMH 是 Java 微基准测试工具,示例测试类:

@BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.NANOSECONDS) public class MyBenchmark { @Benchmark public void testMethod() { // 测试代码 } }

12.2 使用 VisualVM 进行性能分析

VisualVM 是强大的性能分析工具:

jvisualvm

12.3 使用 JMC 进行飞行记录

Java Mission Control 提供高级监控:

jmc

13. 多版本管理工具

13.1 使用 SDKMAN 管理 Java 版本

安装 SDKMAN:

curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh"

使用 SDKMAN 安装 Java:

sdk install java 17.0.1-tem sdk use java 17.0.1-tem

13.2 使用 jenv 管理 Java 版本

安装 jenv:

git clone https://github.com/jenv/jenv.git ~/.jenv

添加 Java 版本:

jenv add /usr/lib/jvm/java-17-openjdk-amd64

14. 容器环境中的 Java

14.1 优化容器内存设置

在容器中运行 Java 时,建议设置:

java -XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -jar app.jar

14.2 使用 JVM 感知的容器编排

在 Kubernetes 中,可以配置:

resources: requests: memory: "1Gi" limits: memory: "2Gi"

14.3 减少容器镜像大小

使用多阶段构建:

FROM eclipse-temurin:17-jdk as builder WORKDIR /app COPY . . RUN ./gradlew build FROM eclipse-temurin:17-jre WORKDIR /app COPY --from=builder /app/build/libs/app.jar . CMD ["java", "-jar", "app.jar"]

15. 未来趋势与建议

随着 Java 的持续发展,以下趋势值得关注:

  • 新版本发布周期缩短,每6个月发布一个主要版本
  • 长期支持(LTS)版本每两年发布一次
  • 模块化系统(Java Platform Module System)的普及
  • 记录类(Record)、模式匹配等新特性的广泛应用
  • GraalVM 原生镜像技术的发展

对于新项目,建议从 Java 17 或更高版本开始。对于现有项目,可以制定逐步升级计划,确保代码库保持现代化并能够利用最新语言特性和性能改进。