OracleJDK与OpenJDK的区别(附带win11下多版本jdk安装)
在Java开发领域,OracleJDK与OpenJDK是两个常被提及的名词,它们都是Java开发工具包(JDK)的实现,但各自具有不同的特点和优势。在早期的java开发中(java8以前)默认使用的jdk都是Oracle公司的jdk,由于当时免费,被应用在大多数企业项目开发中,但随着jdk8的202u版本之后Oracle公司开始进行商业收费,在此后的企业级项目开发中,中小型公司由于规模和成本问题大多数都选择openjdk进行企业级项目替代,为了避免项目开发商业版权纠纷,java开发后续建议使用openjdk进行替换,两者性能和使用上几乎没有任何差异。
1 开源性
OpenJDK:
- 完全开源:OpenJDK由OpenJDK社区开发和维护,基于GPL v2 with Classpath Exception许可证,是一个完全开源的项目。任何人都可以自由使用、修改和分发OpenJDK,没有使用限制。
- 广泛支持:由于OpenJDK的开源性质,许多组织和公司都提供了基于OpenJDK源代码的二进制构建版本,如Adoptium(前身为AdoptOpenJDK)、Amazon Corretto、Red Hat OpenJDK等。
OracleJDK:
- 商业产品:OracleJDK由甲骨文公司(Oracle)开发并维护,是一款商业产品。尽管其源代码与OpenJDK相似,但OracleJDK在发行版中可能会包含一些专有组件和工具。
- 许可限制:OracleJDK在2019年之后采用了商业许可证,免费使用仅限于开发、测试和个人用途。对于生产环境的使用,可能需要购买商业许可证。
2 功能特性
OpenJDK:
- 功能:包含 Java 开发所需的基本功能,适用于大多数开发场景。
- 工具:可能缺少一些 OracleJDK 提供的专有工具和插件,但开源社区提供了许多替代方案。
OracleJDK:
- 功能:早期版本(Java 8 ~ Java 11)包含一些 OpenJDK 没有的特有功能和工具,如 Java Flight Recorder (JFR) 和 Java Mission Control (JMC)。
- 工具:从 Java 11 之后,大部分 Oracle JDK 私有组件都已开源,因此功能性差异几乎消失。
3 更新与支持
OpenJDK:
- 更新频率:发布周期较快,通常每 3 个月发布一个新版本。这使得 OpenJDK 可以迅速引入新功能和修复问题,但也意味着这些版本可能包含更多的未完全测试的变更。
- 长期支持 (LTS):OpenJDK 不提供官方的长期支持 (LTS) 服务。但是,很多公司(如 Red Hat 和 Azul)基于 OpenJDK 提供 LTS 版本,因此两者的稳定性差异不大。
OracleJDK:
- 更新频率:通常每 6 个月发布一个新版本。在发布之前,Oracle JDK 会进行更加严格的测试和质量保证,以确保其稳定性和可靠性。
- 长期支持 (LTS):Oracle JDK 提供每三年一次的 LTS 版本,并有长期支持服务。这对于企业用户来说,是一个重要的考虑因素,因为长期支持版本能够提供更高的稳定性和安全性。
4 实际应用场景
- 开发环境:
- 个人开发者或小型团队:OpenJDK 是一个理想的选择,尤其是其完全免费的特性使其在开发和测试环境中广泛使用。
- 生产环境:
- 大型企业:大型企业可能更倾向于选择 Oracle JDK,尤其是需要 LTS 版本和商业支持时。然而,许多企业也开始使用基于 OpenJDK 的 LTS 版本,如 AdoptOpenJDK 或 Red Hat 的 OpenJDK,来平衡成本和支持。
5 性能
- 性能差异:从性能角度来看,OpenJDK 和 Oracle JDK 的差异非常小。在大多数情况下,运行相同代码的时间差异可以忽略不计。然而,对于特定的高性能需求,仍需进行详细的基准测试。
6 市场使用率
从上述图可以看到,在 JDK 供应商方面,Oracle 的 JDK 保持领先,但占比正逐年下降,该公司在 2022 年占据了 34% 的市场份额,2023 年滑落到 29%,2024 年为 21%,其他供应商例如排名第二的Amazon和Azul、BellSoft等都属于openjdk阵营,openjdk阵营市场使用率上升明显。
注意:openjdk事实上也有区分,例如原版的openjdk隶属于开源社区可以理解为标准版,除此之外还有各大厂商的openjdk版本,在原版的基础上加入了自家的部分优化,例如Amazon、Azul、BellSoft等各厂家的openjdk也是免费使用不需要授权(也有商业付费版一般不用)。openjdk选择哪家就要看自己的项目需求和公司的情况,例如spring系列开发可以选择BellSoft 的openjdk,为什么选择这个下文会提到。
总结:企业级大型项目的java开发可以使用OracleJDK商业授权版,可以由Oracle公司提供长期的技术支持服务,安全性和稳定性方面有足够的保障。中小型公司或个人开发者或学习爱好者进行java开发,可以使用OpenJDK开源且免费不需要考虑商业授权的问题。OracleJDK和OpenJDK无论选择哪个版本,Java的核心特性和语法都是一致的,关键在于根据自身需求进行合理选择。
7 jdk的多版本安装
以openjdk8、openjdk21示例(其他版本和发行商jdk类似处理),如果是使用spring家族进行java项目开发官方推荐使用BellSoft Liberica JDK(贝尔实验室)
由于个人和公司使用springboot进行项目开发比较多,所以使用BellSoft Liberica JDK比较合适,具体参考spring官网:https://spring.io/quickstart,可以看到此处spring官方推荐使用BellSoft Liberica JDK(贝尔实验室)
选择jdk8,进入后找到64位下载地址zip压缩包进行下载(jdk21或者jdk17自行下载)
注意:windows系统下尽量不要选择msi安装包进行安装,不方便进行后续的多版本jdk切换!
其他opendjk推荐,azul的openjdk官网下载地址:https://www.azul.com/downloads/#zulu
下载解压后,可以看到是一个jdk文件夹,例如此处我已经下载了多个发行商的jdk
下载了那么多jdk那么如何才能确定当前使用的是哪个?接下来就是重点了,环境变量设置决定使用哪个jdk版本
环境变量设置
win11下打开资源管理器,进入后找到此电脑鼠标右键点击属性
选择新建两个环境变量,一个JAVA_HOME、一个JAVA_HOME8设置对应之前下载的jdk解压文件目录
点击确定后再次点击新建JAVA_HOME8
选择目录根据自己之前下载解压的jdk路径,选择带有bin文件夹下的上一级目录
点击确定后新添加的环境变量如下
找到path,点击编辑
点击右侧新建,添加%JAVA_HOME%\bin变量
返回环境变量页面,要确定才生效
使用cmd,输入java -version查看java版本是否对应
win+R运行cmd
切换djk版本
按上述步骤新建一个JAVA_HOME21(jdk21解压路径)
编辑JAVA_HOME变量
完成后点击确认
重新运行cmd命令框查看是否切换成功(注意:每次切换后需要关闭命令框再打开!)
win+R运行cmd,可以看到对应版本已经切换成功,使用上述同样的方法可以任意切换不同版本的jdk,好了大功告成
标签:JDK,jdk,OpenJDK,版本,下多,openjdk,OracleJDK From: https://blog.csdn.net/hjl_and_djj/article/details/143362612