当前位置: 首页 > news >正文

JDK 17、OpenJDK 17、Oracle JDK 17 的说明

Java生态系统的核心概念:

简单来说:

  • JDK 17 是一个标准规范,定义了Java开发工具包第17个长期支持版应该包含什么功能。

  • openjdk-17-jdk 是一个具体的实现,是遵循上述规范、由OpenJDK社区提供的开源软件包。

下面我们通过一个表格和详细解释来深入理解它们的区别。

核心区别对比

特性JDK 17 (泛指)openjdk-17-jdk (特指)
本质规范 (Specification)实现 (Implementation)
含义Java SE 17平台的标准,定义了应该有哪些功能和API。遵循JDK 17标准的具体、可安装运行的开源代码实现。
来源由JCP(Java社区进程)通过JSR(Java规范请求)定义。OpenJDK社区(由Oracle、Red Hat、IBM、Azul等公司共同维护)构建。
许可证无(因为它是规范,不是代码)。GPLv2+CPE(开源许可证,可免费商用)。
如何获取你不能直接获取“JDK 17”,你获取的是它的某种实现,比如OpenJDK 17、Oracle JDK 17等。通过Linux发行版(如Ubuntu、银河麒麟)的包管理器(如 apt)安装。

详细解释与类比

1. JDK 17 - “国家标准”

你可以把 JDK 17 想象成一份 《智能手机国家标准》

  • 这份标准规定了一部合格的智能手机必须能打电话、发短信、上网、运行符合规范的App等。

  • 只要符合这个标准,不管是华为、小米、苹果还是OPPO生产的手机,都是“智能手机”。

  • 同样,JDK 17 是一个标准,任何实现了这个标准的产品都可以被称为“JDK 17兼容的实现”。

2. openjdk-17-jdk - “华为手机”

而 openjdk-17-jdk 就像是 华为公司根据上述国家标准生产的具体一款手机

  • 它是标准的一个具体实现

  • 它是开源的,意味着任何人都可以查看它的源代码,也可以基于它进行修改和分发。

  • 它通常通过Linux系统的软件仓库(如 apt)来分发和安装,非常方便,与系统集成度高。

3. 其他“手机品牌”

除了 openjdk-17-jdk(华为手机)这个实现,市场上还有其他同样遵循 JDK 17 标准(国家标准)的实现,它们各有特点:

  • Oracle JDK 17:相当于“苹果手机”。它曾经与OpenJDK在细节上有所不同(比如更好的飞行模式),但现在两者代码库已基本一致。主要区别在于许可证:Oracle JDK 17+ 用于生产环境可能需要付费订阅(除非用于个人开发或测试)。

  • Azul Zulu Builds of OpenJDK:相当于“华为手机的官方纯净版”。它提供基于OpenJDK源码的预构建二进制包,确保经过测试,并支持多种平台。

  • Eclipse Temurin:相当于“由开源社区大佬监制的华为手机”。由Eclipse基金会下的Adoptium项目组维护,是又一个高质量、经过全面测试的OpenJDK构建版本。

  • Amazon Corretto:相当于“亚马逊定制的华为手机(深度优化版)”。由亚马逊提供,自带一些性能优化和长期支持。

在银河麒麟系统上对你意味着什么?

对于你使用的银河麒麟(aarch64架构)系统:

  1. 首选安装 openjdk-17-jdk
    当你运行 sudo apt install openjdk-17-jdk 时,你安装的就是由麒麟软件仓库提供的、为你的系统架构预编译好的OpenJDK实现。这是最简单、最安全、与系统集成度最高的方式,因为它会自动处理所有依赖关系。

  2. 如果需要其他实现
    如果你因为某些原因(例如需要Oracle的特定商业功能、或公司规定)不能使用仓库版的OpenJDK,你才会需要去手动下载并安装 Oracle JDK 17 或 Azul Zulu JDK 17 等其他实现。这时,你安装的仍然是JDK 17的一个实现,只是供应商不同。

总结

你的操作你得到的是什么优点
sudo apt install openjdk-17-jdkJDK 17规范 的 OpenJDK实现 (由系统仓库提供)安装简单、免费、集成度高、更新方便
从Oracle官网下载并安装 jdk-17_linux-aarch64_bin.tar.gzJDK 17规范 的 Oracle JDK实现可能包含最新的紧急修复(但需注意许可证条款)
从Azul官网下载Zulu的DEB包安装JDK 17规范 的 Azul Zulu实现 (基于OpenJDK)经过额外测试,提供多平台支持

所以,结论是:对于绝大多数用户,在银河麒麟上直接使用 apt install openjdk-17-jdk 就是安装JDK 17的最佳实践。 你得到的是一个完全符合标准、免费且易于管理的JDK。

如何区分安装的是 OpenJDK 17 还是 Oracle JDK 17?

最直接的方法:使用 java -version 命令

  1. 打开终端。

  2. 输入以下命令并回车:

    bash

    java -version
  3. 观察输出的第一行信息,这是判断的核心依据。


结果判断

根据命令输出,你会看到以下几种典型情况:

情况一:安装的是 OpenJDK

输出中会明确包含 "OpenJDK" 字样。

输出示例:

bash

openjdk version "17.0.11" 2024-04-16
OpenJDK Runtime Environment (build 17.0.11+9-Ubuntu-122.04.1)
OpenJDK 64-Bit Server VM (build 17.0.11+9-Ubuntu-122.04.1, mixed mode, sharing)

✅ 关键标识:出现了 OpenJDK。这清楚地表明你安装的是 OpenJDK 的实现。后面的 Ubuntu 也暗示了这是通过系统包管理器(如 apt)安装的版本。

情况二:安装的是 Oracle JDK

输出中会包含 "Java(TM) SE Runtime Environment" 字样,并且通常没有 "OpenJDK"。

输出示例:

bash

java version "17.0.10" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing)

✅ 关键标识:出现了 Java(TM) SE Runtime Environment 和 Java HotSpot(TM)(TM) 是商标符号,这是 Oracle 官方发行的 JDK 的典型特征。


其他辅助判断方法

如果 java -version 的输出信息不够明确(有些精简的构建版可能省略了供应商信息),你还可以使用以下命令获取更详细的信息:

1. 使用 apt 政策查询(适用于通过 apt 安装的包)

如果你是通过 sudo apt install openjdk-17-jdk 安装的,那么它几乎100%是 OpenJDK。你可以查询包的详细信息来确认:

bash

apt policy openjdk-17-jdk

这个命令会显示该包的安装版本和来源,如果是来自系统仓库,那它就是 OpenJDK。

2. 查看 JAVA_HOME 路径(适用于手动安装)

检查环境变量 JAVA_HOME 指向的路径,从路径名有时也能看出端倪。

bash

echo $JAVA_HOME
  • OpenJDK 的典型安装路径可能包含 openjdk-17 或类似结构(尤其是在使用包管理器安装时)。

  • Oracle JDK 如果你手动安装并解压,路径名通常是你自己定义的,可能包含 jdk-17 或 jdk17

3. 列出已安装的Java相关包

查询通过包管理器安装的Java包,它们的名字会明确指示是OpenJDK。

bash

# 查找已安装的JDK包
dpkg -l | grep openjdk# 或者查找所有包含'jdk'或'java'的包
dpkg -l | grep -E 'jdk|java'

如果你在列表中看到 openjdk-17-jdk 或 openjdk-17-jre,那就证明是 OpenJDK。

总结与结论

特征检查点OpenJDKOracle JDK
java -version 输出明确包含 OpenJDK 字样包含 Java(TM) SE Runtime Environment 字样
安装方式通常通过系统包管理器(如 apt)安装通常从Oracle官网手动下载并安装
许可证GPLv2+CPE (开源免费)需要关注Oracle的许可条款(可能需付费用于商业生产)

对于你的银河麒麟系统,如果你是通过 sudo apt install openjdk-17-jdk 命令安装的,那么你安装的一定是 OpenJDK 17

现在,你只需要在终端输入 java -version,根据输出结果中的关键字,就能立刻确认你正在使用的是哪一种JDK了。


文章转载自:

http://HqQ07ubJ.rckLc.cn
http://qwlT4ubx.rckLc.cn
http://f1recBBv.rckLc.cn
http://nlSdz4UW.rckLc.cn
http://YsuZwfbp.rckLc.cn
http://JiqKRjbl.rckLc.cn
http://c9TUY4uI.rckLc.cn
http://tCVFbNzz.rckLc.cn
http://swlnaZ5O.rckLc.cn
http://muOmMCvP.rckLc.cn
http://lfPJoEDU.rckLc.cn
http://dlyeOZAq.rckLc.cn
http://pUDVMgli.rckLc.cn
http://fPwbeXcL.rckLc.cn
http://5wO1Inl6.rckLc.cn
http://SfbF4t9R.rckLc.cn
http://4FK8nL02.rckLc.cn
http://nA9Fp3fM.rckLc.cn
http://SMZyu7fH.rckLc.cn
http://jQ9XT25B.rckLc.cn
http://Qw6Xsdzp.rckLc.cn
http://QPqg8LXa.rckLc.cn
http://cxyezTBG.rckLc.cn
http://CKZ54jqE.rckLc.cn
http://6XnnmaM6.rckLc.cn
http://xFtlaAJ3.rckLc.cn
http://aNeDL6fl.rckLc.cn
http://hngJTRP5.rckLc.cn
http://trOGc5R1.rckLc.cn
http://9nvkKrEI.rckLc.cn
http://www.dtcms.com/a/373619.html

相关文章:

  • VM中CentOS 7密码重置
  • 科技信息差(9.8)
  • MATLAB的数值计算(三)曲线拟合与插值
  • 城市脉搏中的“绿色卫士”:当智能科技邂逅城市清洁
  • linux播放视频出现需要MPEG-4 AAC解码器,H.265(Main Profile)解码器,但是没有安装
  • ARM工作模式、汇编学习
  • 【入门级-算法-6、排序算法:选择排序】
  • React state在setInterval里未获取最新值的问题
  • Linux 物理机如何区分 SSD 与 HDD ——以 DELL PERC H730 Mini 为例
  • AP和stage模式差异
  • 支持生成一维条形码Extend .NET
  • 企业级固态硬盘——U.2接口技术
  • 【Android虚拟摄像头】七、安卓15系统实现虚拟摄像头
  • FxSound:提升音频体验,让音乐更动听
  • Don‘t Sleep:保持电脑唤醒,确保任务不间断
  • android/java中,配置更改导致activity销毁重建的解决方法
  • C++day8作业
  • 【CI/CD】GitHub Actions 快速入门
  • 如何在安卓手机/平板上找到下载文件?
  • Claude Code Windows 原生版安装指南
  • AR技术:多行业数字化转型的加速引擎
  • C++初阶(4)类和对象(上)
  • SpringAI企业级应用开发面试全流程解析:核心技术、架构落地与业务场景实战
  • 从旋转位置编码RoPE到YaRN的原理与实现
  • xfs inode cluster lock order导致的死锁
  • @PostMapping 是什么
  • Vue笔记2+3
  • Android 倒车影像
  • 哈希表-49.字母异位词分组-力扣(LeetCode)
  • JLINK 调试器单步调试单片机