JDK17 、 OpenJDK

912 阅读11分钟

背景

对于 Oracle JDK 8,Oracle 的授权策略在 2019 年 1 月发生了变化。在此之前,Oracle JDK 8 可以免费用于开发和生产环境,但之后,Oracle 更新了其授权协议,对 Oracle JDK 8 的使用进行了如下限制:

  • 免费使用:Oracle 允许个人开发者和小型企业在非生产环境中免费使用 Oracle JDK 8。这包括开发、测试、原型设计等。
  • 生产环境:对于在生产环境中使用 Oracle JDK 8,Oracle 要求用户购买商业许可。这意味着,如果你要在生产服务器上部署应用程序并使用 Oracle JDK 8,你需要支付费用。
  • 支持费用:除了购买商业许可之外,如果用户希望获得 Oracle 的技术支持和更新(包括安全补丁),还需要购买支持服务合同
  • 其他用途:对于教育、研究和其他非商业用途,Oracle JDK 8 通常可以免费使用。

在 2019 年之前,Oracle JDK 8 是可以免费用于生产环境的,但之后,为了鼓励用户迁移到更新的 LTS 版本(如 JDK 11 或更高版本),Oracle 实施了新的许可策略。

需要注意的是,Oracle JDK 8 的公共更新在 2019 年 1 月结束,但是,Oracle 仍然为购买了支持合同的客户提供扩展更新支持。

如果你的组织仍在使用 Oracle JDK 8,并且需要继续在生产环境中使用它,你应该考虑以下选项:

  • 迁移到 OpenJDK 8:OpenJDK 8 是 Oracle JDK 8 的开源版本,可以免费用于任何目的,包括生产环境。许多组织和供应商提供了基于 OpenJDK 8 的构建版本,例如 AdoptOpenJDK、Amazon Corretto 或 Zulu OpenJDK。
  • 购买 Oracle 的商业支持:如果你的组织需要继续使用 Oracle JDK 8,并且希望获得官方支持和更新,你可以选择购买 Oracle 的商业支持服务。
  • 迁移到更新的 LTS 版本:Oracle 推荐将应用程序迁移到更新的 LTS 版本,如 JDK 11 或 JDK 17,这些版本提供了更长的支持周期和最新的功能。

** OracleJDK和OpenJDK在功能上基本相同,所以推荐使用 OpenJDK17 或其他开源的JDK版本,这些开源版本都是基于OpenJDK构建并提供长期支持的,比如:AdoptOpenJDK、RedHatOpenJDK。**

免费使用Java 8用户

Java 8 JDK 最后免费的是8u201(CPUs)和8u202(PSUs)两个版本,其实他们可以说都是拥有不同版本号的最后一个免费版本。两者的区别在于 CPUs 往往包含安全漏洞修复和重要漏洞修复,是需要所有用户都及时升级更新的,版本号采用奇数编号。

PSUs 包含相应 CPUs 中的所有修复以及其他非重要修复,仅当您受到Oracle JDK关键补丁更新 (CPUs)版本之外的其他漏洞的影响时才应当使用相应的补丁集更新 (PSUs) ,版本号采用偶数编号。

官网 Java 8 JDK 免费版本下载地址:www.oracle.com/java/techno…

Oracle JDK的8u201和8u202版本是最后一个免费版本,可以在不升级的情况下,长期免费用于生产环境[^1^][^4^]。这两个版本以前的所有版本也都可以在生产环境中长期免费使用。始终使用这些免费版本的JDK不会涉及任何版权或法律问题,但一旦升级到收费版本而未支付授权费用,就可能面临法律风险

Oracle JDK的8u201和8u202版本是最后一个免费版本,可以在不升级的情况下,长期免费用于生产环境。因此,jdk1.8.0_201属于免费版本,可以免费使用。

从 8u201 开始,Oracle JDK 的更新分为两种类型:关键补丁更新(CPU)和补丁集更新(PSU)。CPU 版本号为奇数,包含安全漏洞修复和重要的错误修复,Oracle 强烈推荐所有用户升级到最新的 CPU 版本 121416。而 PSU 版本号为偶数,包含了 CPU 中的所有修补程序以及其他非关键修补程序,仅当用户受到该版本中修复的其他错误之一的影响时,才应使用 PSU 版本 1214。

因此,8u201 是 CPU 版本,而 8u202 是 PSU 版本。尽管 8u202 包含了 8u201 中的所有更新,但除非用户需要 PSU 中包含的额外非关键修补程序,否则推荐使用 8u201 版本

从 8u211 版本开始,Oracle JDK 8 的商用需要遵守 OTN 许可协议并需要付费,而 8u201 和 8u202 版本仍然可以免费使用,但不会收到后续的安全补丁和更新 111516。对于不想支付费用的用户,可以选择使用 OpenJDK 或其他免费的 JDK 实现,如 Zulu、AdoptOpenJDK、Amazon Corretto 和 Alibaba Dragonwell 等 111617。

从JDK 8u211和8u212版本开始,便采用了OTN许可,意味着用于商业用途的开发需要付费。 jdk1.8.0_221是收费版本

JDK17

  • Oracle 正在免费提供行业领先的Oracle JDK,包括所有季度安全更新。这包括商业和生产用途。
  • 新许可是“Oracle 免费条款和条件”(NFTC) 许可。此 Oracle JDK 许可证允许所有用户免费使用,甚至可以用于商业和生产用途。只要不收费,再分发是允许的。
  • 开发人员和组织现在无需点击即可轻松下载、使用、共享和重新分发 Oracle JDK。
  • Oracle 将从Oracle JDK 17开始提供这些免费版本和更新,并在下一个 LTS 版本之后继续提供整整一年。以前的版本不受此更改的影响。 image.png

Spring framework 6 和Spring Boot 3 都将基于JAVA 17

JDK17 下载地址 www.oracle.com/java/techno…

LTS,原名 Long-Term Support 长期支持 LTS 版本更加注重稳定性,安全性,性能改进,默认支持是 8 年, 其中 JDK 8 延长至 2030 年(16年),延长支持期间不再提供新的功能。 Free Builds from Source - 发行版源代码是公开的,人们可以组装自己的构建版本 Free Binary Distributions - 发行版二进制文件可以公开下载和使用 Extended Updates - 也被称为LTS(长期支持),指的是发布周期超过6个月的公开更新。 Commercial Support - 一些提供商为满足条件的付费客户提供扩展更新和客户支持,例如Oracle JDK(详情)。 Permissive License - 软件许可证是非保护性的 (non-protective),例如Apache 2.0

Oracle Java SE Support Roadmap*†
ReleaseGA DatePremier Support UntilExtended Support UntilSustaining Support
8 (LTS)**March 2014March 2022December 2030*****Indefinite
9 - 10 (non-LTS)September 2017 - March 2018March 2018 - September 2018Not AvailableIndefinite
11 (LTS)September 2018September 2023January 2032*****Indefinite
12 - 16 (non-LTS)March 2019 - March 2021September 2019 - September 2021Not AvailableIndefinite
17 (LTS)September 2021September 2026****September 2029****Indefinite
18 - 20 (non-LTS)March 2022 - March 2023September 2022 - September 2023Not AvailableIndefinite
21 (LTS)September 2023September 2028****September 2031****Indefinite
22 (non-LTS)March 2024September 2024Not AvailableIndefinite
23 (non-LTS)***September 2024March 2025Not AvailableIndefinite
24 (non-LTS)***March 2025September 2025Not AvailableIndefinite
25 (LTS)***September 2025September 2030September 2033Indefinite

www.oracle.com/cn/java/tec…

J2EE:Enterprise Edition,企业版,从 JDK 5.0 开始,改名为 Java EE。

JAVA 17 带来的不仅仅是新功能。更快的 LTS 节奏和免费的 Oracle JDK 使其成为有史以来支持最好的现代版本。Oracle JDK收费为人诟病,此次Oracle推出了Free Java License ,大致摘要:

Oracle 正在免费提供行业领先的Oracle JDK,包括所有季度安全更新。这包括商业和生产用途。

新许可是“Oracle 免费条款和条件”(NFTC) 许可。此 Oracle JDK 许可证允许所有用户免费使用,甚至可以用于商业和生产用途。只要不收费,再分发是允许的。

开发人员和组织现在无需点击即可轻松下载、使用、共享和重新分发 Oracle JDK。

JDK 17:可以免费使用到 2024 年 9 月

Oracle 将从Oracle JDK 17开始提供这些免费版本和更新,并在下一个 LTS 版本之后继续提供整整一年。以前的版本不受此更改的影响。

  • JDK 17:可以免费使用到 2024 年 9 月
  • 下一个 LTS 版本(21 (LTS) September 2023)之后继续提供整整一年 Oracle JDK 17是Oracle提供的免费版本的Java Development Kit,JDK 17将会获得Oracle提供的标准支持至2024年9月。 这意味着在2024年9月之后,Oracle不再提供对JDK 17的支持,包括安全更新、性能更新和必要的补丁。 如果您需要在2024年9月之后继续获取支持,您可以考虑以下选项:
  1. 继续使用Oracle JDK,但要自行承担潜在的安全风险和支持中断的后果。
  2. 迁移到OpenJDK,它是一个开源的、与Oracle JDK兼容的实现,通常会得到更新和支持。
  3. 购买Oracle的商业支持,这将提供额外的支持和维护服务。
  4. 使用Oracle提供的长期支持(LTS)版本,比如Oracle JDK 8 或 11,它们将获得更长期的支持。

请注意,在2020年1月之后,如果您在生产环境中使用Oracle JDK而没有有效的订阅或者转移到Oracle的支持计划,您可能面临潜在的许可证风险。因此,建议在2024年9月之后对JDK进行升级或迁移。

语言特性增强 密封的类和接口(正式版) 工具库的更新 JEP 306:恢复始终严格的浮点语义 JEP 356:增强的伪随机数生成器 JEP 382:新的macOS渲染管道 新的平台支持 JEP 391:支持macOS AArch64 旧功能的删除和弃用 JEP 398:弃用 Applet API JEP 407:删除 RMI 激活 JEP 410:删除实验性 AOT 和 JIT 编译器 JEP 411:弃用安全管理器以进行删除 新功能的预览和孵化API JEP 406:新增switch模式匹配(预览版) JEP 412:外部函数和内存api (第一轮孵化) JEP 414:Vector API(第二轮孵化) JEP 389:外部链接器 API(孵化器) JEP 393:外部存储器访问 API(第三次孵化) 如何选择版本 通过上面的介绍可以看出,JDK 8,JDK 11,JDK 17 是 3 个长期维护的版本,

JDK 8

Java8即将停止免费官方支持,越来越多的项目将转向Java17,包括大名鼎鼎的Spring Boot 3.0,它在2022年1月20日发布的第一个里程碑版本(M1)正是基于Java17构建的。

Lambda 和 函数式接口 方法推导 接口默认方法和静态方法 重复注解 类型注解 类型推断 Optional Stream 日期时间 API Base64 支持 并行数组 ParallelSort

JDK 11

基于嵌套的访问控制 标准 HTTP Client 升级 Epsilon:低开销垃圾回收器 简化启动单个源代码文件的方法 用于 Lambda 参数的局部变量语法 低开销的 Heap Profiling 支持 TLS 1.3 协议 ZGC:可伸缩低延迟垃圾收集器 飞行记录器 动态类文件常量

openjdk17

openjdk.org/projects/jd…

下载地址: jdk.java.net/archive/

多个JDK版本切换

JDK 下载 JDK17下载: www.oracle.com/java/techno…

C:\Program Files\Common Files\Oracle\Java\javapath C:\Program Files (x86)\Common Files\Oracle\Java\javapath 安装一次,就会生成一条这样的变量,那就把他们都删掉

image.png

2、给Path添加变量

%JAVA_HOME%\bin %JAVA_HOME%\jre\bin

3、创建系统变量

变量名: CLASSPATH (这步似乎不操作也可以) .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

3.1、创建 JAVA_HOME 变量名:JAVA_HOME 变量值:%JAVA_HOME17% 或者 %JAVA_HOME8%

修改此处变量值中的数字来达到启用所对应的jdk

image.png

java -version java version "1.8.0_271" Java(TM) SE Runtime Environment (build 1.8.0_271-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)

Oracle JDK主要面向需要商业支持和附加功能的用户

OpenJDK

OpenJDK适合那些寻求免费、‌开源解决方案的用户

OpenJDK 下载地址 jdk.java.net/archive/

OPEN JDK 8 下载地址 jdk.java.net/java-se-ri/…