首页 > 数据库 >OracleJDK与OpenJDK的区别(附带win11下多版本jdk安装)

OracleJDK与OpenJDK的区别(附带win11下多版本jdk安装)

时间:2024-11-02 20:52:03浏览次数:3  
标签:JDK jdk OpenJDK 版本 下多 openjdk OracleJDK

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 市场使用率

image-20241030124236092

从上述图可以看到,在 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(贝尔实验室)

image-20241026211402919

选择jdk8,进入后找到64位下载地址zip压缩包进行下载(jdk21或者jdk17自行下载)

注意:windows系统下尽量不要选择msi安装包进行安装,不方便进行后续的多版本jdk切换!

image-20241026211731330

image-20241026211917736

其他opendjk推荐,azul的openjdk官网下载地址:https://www.azul.com/downloads/#zulu

image-20241010164523539

下载解压后,可以看到是一个jdk文件夹,例如此处我已经下载了多个发行商的jdk

image-20241030122310247

下载了那么多jdk那么如何才能确定当前使用的是哪个?接下来就是重点了,环境变量设置决定使用哪个jdk版本

环境变量设置

win11下打开资源管理器,进入后找到此电脑鼠标右键点击属性

image-20241030125825496 image-20241020181027309

选择新建两个环境变量,一个JAVA_HOME、一个JAVA_HOME8设置对应之前下载的jdk解压文件目录

image-20241030130037801 image-20241030130156934

点击确定后再次点击新建JAVA_HOME8

image-20241030130339840

选择目录根据自己之前下载解压的jdk路径,选择带有bin文件夹下的上一级目录

image-20241030130530799

点击确定后新添加的环境变量如下


image-20241026212506260

找到path,点击编辑

image-20241026215557576

点击右侧新建,添加%JAVA_HOME%\bin变量

image-20241026215837648

返回环境变量页面,要确定才生效

image-20241030131943139

使用cmd,输入java -version查看java版本是否对应

win+R运行cmd

image-20241030131510512

image-20241026220114157

切换djk版本

按上述步骤新建一个JAVA_HOME21(jdk21解压路径)

image-20241030131129899

编辑JAVA_HOME变量

image-20241030131317676

完成后点击确认

image-20241030131336944

重新运行cmd命令框查看是否切换成功(注意:每次切换后需要关闭命令框再打开!)

win+R运行cmd,可以看到对应版本已经切换成功,使用上述同样的方法可以任意切换不同版本的jdk,好了大功告成

image-20241030131700403

标签:JDK,jdk,OpenJDK,版本,下多,openjdk,OracleJDK
From: https://blog.csdn.net/hjl_and_djj/article/details/143362612

相关文章

  • 一文搞懂JDBC全流程(含MySQL安装和JDK下载)
    前言:1.了解问题1:什么是JDBC?JDBC全称:JavaDatabaseConnectivity,即Java数据库连接JDBC是Java提供的一组独立于任何数据库管理系统的API。Java提供接口规范,由各个数据库厂商提供接口的实现,厂商提供的实现类封装成jar文件,也就是数据库驱动jar包。学习JDBC,充分体现了面向接口......
  • Jdk1.8 垃圾收集器分类及垃圾收集器选择思路
     根据运行方式JavaHotSpotVM包括三种不同类型的收集器分别是串行收集器、并行收集器和并发收集器,每种收集器具有不同的性能特征。 串行收集器使用单个线程来执行所有垃圾收集工作,这使得它相对高效,因为线程之间没有通信开销。它最适合于单处理器计算机,因为它无法利用多处理......
  • Java基础篇 (一)(JDK安装教程 零基础谁都可以学会!!!)
    前言大家好,我是小斜。俗话说的好,十年树木,百年树人。欲成大事,必须要坚持不懈努力。学习编程也一样,只有通过日积月累地学习才能有质的飞跃!我在这里给刚入门的大伙们提几点小建议:1.知行合一,编程归根结底就是要我们把思考出来的东西,再让它通过代码实现的一个过程。如果仅仅停留......
  • lombok 在 jdk 23 版本下javac无法编译问题, 解决方法
    问题现象Javadoc"cannotfindsymbol"errorwhenusingLombok's@Builderannotation 看到官方提交的代码ant在脚本中添加如下参数<propertyname="compiler.args"value="-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED......
  • 【Java】使用JDK自带工具生成密钥对
    keytool介绍keytool是一个用于管理密钥和证书的命令行工具,通常随Java开发工具包(JDK)一起提供。您可以使用 keytool来生成密钥对、创建和管理密钥库、导入和导出证书等。`keytool`是一个用于管理密钥和证书的命令行工具,通常随Java开发工具包(JDK)一起提供。您可以使用`ke......
  • JDK和CGLIB动态代理技术的适用场景和特点
    区别项目JDK动态代理CGLIB动态代理代理原理基于接口(Interface)基于字节码生成(Subclassing)实现方式使用 java.lang.reflect.Proxy 类使用 net.sf.cglib.proxy.Enhancer 类被代理类要求必须实现一个或多个接口可以代理没有实现接口的类,可以是普通类......
  • JDK新特性--Stream流
    目录解释什么是Stream流以及它在Java中的作用?Stream流的概念Stream流的作用Stream流的使用示例注意事项描述StreamAPl中的中间操作和终端操作的区别?中间操作(IntermediateOperations)终端操作(TerminalOperations)解释并行流的概念及其优势?使用并行流时需要注意的事项:解释Stream......
  • 基于alpine制作jdk8基础镜像/解决时区问题
    在一次使用镜像部署项目中,发现推送的消息时间不是预设的,检查后发现是基础镜像时区不对导致。下面是自己制作基础镜像的简单记录,可参考制作更好的基础镜像,以支持快速部署。 1、拉取alpinedockerpull openjdk:8-jdk-alpine2、创建Dockerfile文件FROMopenjdk:8-jdk-alpine......
  • JVM、JDK、JRE的区别是什么
    在探讨Java编程语言及其环境时,我们会经常遇到JVM、JDK、JRE这三个词。每个词都有自己特定的定义和角色。让我们详细了解一下这三者之间的区别。Java虚拟机(JVM)是Java平台的一部分,负责执行Java字节码。Java运行环境(JRE)是运行Java程序所需的环境。Java开发工具包(JDK)是Java的开发环境......
  • IDEA如何配置Java环境,jdk路径
    前言我们在使用IDEA开发Java应用时,一般第一步就是需要配置好我们的jdk环境,并且在IDEA里面配置jdk的安装路径。那么,我们应该如何配置呢?如何配置jdk路径首先,我们点击【File】,再点击【ProjectStructure】。然后,我们点击下【Project】,点击【Edit】,选择jdk的安装路径。这里,我......