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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/3547.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第三十一天 | 56.合并区间 738.单调递增的数字 968.监控二叉树

LeetCode 56.合并区间: 文章链接 题目链接:56.合并区间 思路: ① 合并所有重叠的区间,合并后的区间数组不重叠,因此下面两种多区间重叠,其中的区间都要进行合并 ② 合并区间:因为情况2也算作…

[ComfyUI]FaceAging:太好玩啦!FaceAging终于装好了!负50到正100岁随心调整!超强又难装的节点安装教程来了! Comfyui教程

大家好!今天我要向大家介绍一个超级有趣的话题——[ComfyUI]FaceAging!这个工具能够让你轻松实现人脸年龄的调整,从负50岁到正100岁,让你的创作更加有趣和独特。 想象一下,你有一个强大的AI助手,它能够根据…

蓝桥杯真题——乐乐的序列和(C语言)

问题描述 乐乐在玩一个游戏,她有一排宝石,每个宝石上都刻有一个整数值。她的目标是从中挑选出一些宝石,使得选出的宝石数量为偶数,且这些宝石上的数字总和最大。如果不选任何宝石(即选出宝石数量为 00,也是…

猫用宠物空气净化器哪个牌子好?求噪音小的宠物空气净化器推荐!

最近真是烦躁到了顶峰!猫咪换毛季太折磨人了,白天上班累的要死,晚上回家还要和猫毛斗争。每天回家都是一场豪赌,需要花费的清理时间取决于家里的猫毛散落程度。有时候忙起来完全不想管,回到家只想躺着。 但最近身体出…

redis7学习笔记

文章目录 1. 简介1.1 功能介绍1.1.1 分布式缓存1.1.2 内存存储和持久化(RDBAOF)1.1.3 高可用架构搭配1.1.4 缓存穿透、击穿、雪崩1.1.5 分布式锁1.1.6 队列 1.2 数据类型StringListHashSetZSetGEOHyperLogLogBitmapBitfieldStream 2. 命令2.1 通用命令copydeldumpexistsexpire …

32位汇编——通用寄存器

通用寄存器 什么是寄存器呢? 计算机在三个地方可以存储数据,第一个是把数据存到CPU中,第二个把数据存到内存中,第三个把数据存到硬盘上。 那这个所谓的寄存器,就是CPU中用来存储数据的地方。那这个寄存器有多大呢&a…

1.1 OpenCV准备工作

介绍了如何在Windows系统中配置Python和Anaconda环境,并安装OpenCV库。首先从Python官网下载并安装Python,然后配置环境变量。接着安装Anaconda,并通过Anaconda Navigator或Prompt管理包。最后,在Anaconda Prompt中使用pip命令安装…

在gitlab,把新分支替换成master分支

1、备份master分支,可以打tag 2、删除master分支 正常情况下,master分支不允许删除,需要做两个操作才能删除 a、变更项目默认分支为非master分支,可以先随便选择 b、取消master为非保护分支 操作了上述两步,就可以删…

【专题】产业全球化视角下中国企业出海人才趋势洞察报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p38107 在当今全球化进程不断加速的时代背景下,出海业务已成为众多企业拓展市场、实现可持续发展的重要战略方向。随着世界经济的紧密联系,不同国家和地区的市场机遇与挑战并存。文末202份出海行业研究报告最新…

uniapp vue3 使用echarts-gl 绘画3d图表

我自己翻遍了网上,以及插件市场,其实并没有uniapp 上使用echarts-gl的样例,大多数都是使用插件市场的echarts的插件 开始自己尝试直接用echartsgl 没有成功,后来尝试使用threejs 但是也遇到一些问题,最后我看官网的时…

世窗健康亮相第三届中国营养师发展大会——AI赋能营养健康 共建人类健康共同体

近日,为贯彻落实《“健康中国2030”规划纲要》,加强营养健康人才队伍建设,推动中国营养健康产业迈向高质量发展。由中国营养师发展大会组委会主办,全国各地营养师协会等多家机构共同发起的第三届中国营养师发展大会在石家庄市成功举办。作为深耕数字健康领域多年的综合服务运营…

基于 GADF+Swin-CNN-GAM 的高创新轴承故障诊断模型

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…

ubuntu20.04安装ros与rosdep

目录 前置配置 配置apt清华源 配置ros软件源 添加ros安装源(中科大软件源) 设置秘钥 更新源 ros安装 安装ros 初始化 rosdep 更新 rosdep 设置环境变量 安装 rosinstall 安装验证 启动海龟仿真器 操控海龟仿真器 rosdep安装更新 安装 使用…

20241105,LeetCode 每日一题,用 Go 实现两数之和的非暴力解法

题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 …

【C++】C++的单例模式

二十四、C的单例模式 1、C的单例模式 本小标题不是讨论C的语言特性,而是一种设计模式,用于确保一个类在任何情况下都只有一个实例,并提供一个全局访问点来获取这个实例。即C的单例模式。这种模式常用于资源管理,如‌线程池、‌缓…

软考的项目管理认证和PMP认证哪个含金量高?

软考高项比较适用于计算机 IT 行业,而 PMP 不受行业限制,各行各业都适用,没有哪个含金量更高的说法 至于哪个更合适,看你想去国企还是民企,国企软考吃香,外企PMP 吃香 两者具体有什么区别呢~~ 一、概念区…

比ChatGPT更牛!苹果新AI模型刷新交互体验!能看懂你的手机屏幕!平板和安卓机也都行

家人们,苹果一直在悄悄进步! 近期,据小鹿观察,各大科技巨头不仅在提升模型解决复杂问题的能力上竞争激烈,而且还在大语言模型应用于用户界面(UI)交互方面上暗暗发力! 最近&#xf…

C++练习题(1)

//C交换两个数的值 #include <iostream> using namespace std; int main() { int a,b,temp; scanf("%d %d",&a,&b); tempa; ab; btemp; printf("%d %d",a,b); return 0; } //C交换两个数的值 #include <…

Docker:namespace隔离实战

上一篇&#xff1a;容器化和虚拟化 namespace namespace通过一种内核技术来实现&#xff0c;允许将不同的系统资源隔离和封装到独立的命名空间中。 为容器化、虚拟化和隔离提供强大的基础。通过使用namespace技术&#xff0c;Linux内核可以创建多个独立的命名空间&#xff0…

生物医药产业前景如何?怎样开展生物医药产业分析?

▶生物医药产业前景 生物医药产业的前景是非常广阔的&#xff0c;主要呈现以下几大特点&#xff1a; 1.市场规模增长&#xff1a;预计到2029年&#xff0c;中国医药制造规上企业营业收入将达到5.4万亿元&#xff0c;2024-2029年年均增长率达到14.04%。这表明生物医药产业将继…