请你喝一杯 Corretto?谈一谈 JDK 的新选择

news2024/12/23 23:44:38

前言

如果以20年的时间为限,让我们选出一个影响力最大的程序语言,我的答案应该只有一个 – 那就是 Java。这个1995年诞生的全新的计算机语言,以“一次编写,到处运行”的跨平台特性以及面向对象、泛型编程等现代语言的特性迅速成为了企业级应用乃至移动应用开发的首选。

伴随着 Java 的普及,用以开发并提供 JVM 支持的 Java Development Kit (JDK) 就成为了最重要的一个开发工具包。历史上曾经出现过许多 JDK 的发行版,例如 IceTea、Blackdown、JRockit、Apache Harmony 等等至今都已成为历史。

Java 是全球应用最广泛的语言技术栈。据统计,全球 Java 开发工程师超过1000万名。而 JDK 作为 Java 语言的软件开发工具包,是整个 Java 应用的核心。当前,在 JDK 全球市场份额中,Oracle JDK 占 70%、OpenJDK 约占 21%。但2019年1月之后,Oracle 不再提供 Oracle JDK 8 免费商业版本更新。

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

Amazon Corretto 是开放 Java 开发工具包 (OpenJDK) 的免费、多平台、生产就绪型发行版。Corretto 提供长期支持,其中包括性能增强和安全修复。亚马逊在内部的数千种生产服务上运行 Corretto,并且 Corretto 已被证明能够兼容 Java SE 标准。借助 Corretto,您可以在常用操作系统(包括 Linux、Windows 和 macOS)上开发和运行 Java 应用程序。

今天,当我们面对 OpenJDK、Azul、Oracle Java SE 等许多 JDK 的选项的时候,我们又该如何取舍呢?

什么是 Amazon Corretto ?

咖啡爱好者都知道,Correto 是一种意大利浓缩咖啡掺入类似白兰地的烈酒调和而成的咖啡。抿上一口,酒与咖啡共饮带来的刺激口感和浓郁气氛使人沉醉。

Amazon Corretto 就是一个,让你仅使用一次,就会沉醉其中的 OpenJDK,下面的内容带你一品它的特色:

Amazon Corretto 支持多种平台,使您能够在云计算环境、私有数据中心、本地的机器或者容器中运行。

与 OpenJDK 相对应的 Corretto 现在可以用于:

Linux x64

https://docs.aws.amazon.com/zh_cn/corretto/latest/corretto-8-ug/generic-linux-install.html?trk=cndc-detail

Linux aarch64

https://docs.aws.amazon.com/zh_cn/corretto/latest/corretto-8-ug/generic-linux-install.html?trk=cndc-detail

Windows x64

https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/windows-7-install.html?trk=cndc-detail

Windows x86

https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/windows-7-install.html?trk=cndc-detail

macOS x64

https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/macos-install.html?trk=cndc-detail

Amazon Linux 2 x64

https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/amazon-linux-install.html?trk=cndc-detail

Amazon Linux 2 aarch64

https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/amazon-linux-install.html?trk=cndc-detail

等多个平台或者操作系统以及云计算环境之上。目前发布的版本有与 Open JDK 8 相对应的 Corretto 8 以及与 OpenJDK 11 对应的 Corretto 11。

为确保与 Java SE 平台的兼容性,对于每个 Corretto 版本上运行技术兼容性工具包(TCK),以确保 Corretto 可作为所有 Java SE 发行版的完全替代,除非您使用的是 OpenJDK 中不可用的特性 (例如,Java Flight Recorder)。Corretto 安装完毕以运行 Java 应用程序现有的 Java 命令行选项、调优参数、监控和其他任操作都将可以继续工作。

作为一家成功的以技术驱动的企业,Amazon 在其25年的历史中构建起来了一套庞大的 IT 系统。数以千计的生产服务都是基于 Java 语言而开发的,而运行这些应用的基础就是 JDK。这个过程,使得 Amazon 积累了丰富的 JDK 应用的经验。在知识问答网站Quora 曾经有这样一个问题,

我统计了一下答案,被提到的最多的开发语言大概就是 Java 了。在这里我想引用 James Gosling 的一句评价。众所周知,James Gosling 是 Java 语言的奠基人,也是我非常尊敬的前辈。他目前在亚马逊云科技担任 Distinguished Engineer ,因工作之便我得以有幸曾与他共进晚餐,听他聊起当年的八卦,这大概也算是一种福利吧。

“Amazon has a long and deep history with Java. I’m thrilled to see the work of our internal mission-critical Java team being made available to the rest of the world”

— James Gosling hljs-right

这句话翻译出来就是“亚马逊在 Java 方面有着悠久而深厚的历史。我很高兴看到我们的内部关键任务 Java 团队的工作可以提供给世界其他地方。

为什么需要 Amazon Corretto ?

回答这个问题需要回顾过去几年围绕着 Java 发生的一系列动荡。

熟悉 Java 的开发者都应该知道 Java SE。我们熟悉的 Java SE 定义了一系列通用的 Java API,还包括了 Java 语言的规范和 Java 虚拟机 (JVM) 的规范。Java SE 最著名的实现之一就是:Oracle Corporation’s Java Development Kit (JDK)。

以往,Java SE 规范受 JCP (Java Community Process https://jcp.org/?trk=cndc-detail) 管理。JCP 决定了哪些新的规范可以加入,哪些需要删除。原则上任何人都可以去实现 Java 的语言规范。如果这个实现通过了 TCK(测试兼容性套件),则通常被认为是兼容的 JDK。但是,因为两件事的发生,围绕着 JDK 的争吵与混乱开始了 –

  • Java 开始每六个月发布一个新的主要版本

  • Oracle 更改了其对 Java 的支持模型。简单说来,Oracle 现在分发两个JDK构建:Oracle JDK 和 Oracle OpenJDK。Oracle JDK免费提供开发和测试,但如果在生产中使用它,则必须付费。Oracle的OpenJDK在任何环境下都是免费的。

为了给这个混乱火上浇油,Oracle 宣布 Java SE 8 将在2019年1月结束 Java SE 8 的公共更新:

https://blogs.oracle.com/java-platform-group/end-of-public-updates-is-a-process%2c-not-an-event?trk=cndc-detail

按照我的理解,这个变化很大程度上与 Oracle 的商业策略有关。但是,每个 Java 用户、社区、企业等都对未来 Java 是否免费使用感到困惑。我相信,大部分 Java 的用户都没有打算为此而付费。此外,尽管 JDK 11 已日趋成熟,JDK 12 正紧锣密鼓的开发中。但现实世界中的大部分Java 应用,尤其是强调稳定性、可靠性的企业应用目前还是建立在 JDK 8 之山。更有许多企业,至今仍将 JDK 8 作为首选的 Java 环境。

这张图是2019年初的一个统计数据,让我们得以了解市场中各个不同版本的现状,由其凸显了当下 Java 8 的重要性。

来源:

https://aspiresoftware.in/blog/wp-content/uploads/2019/01/10824654-screen-shot-2018-12-05-at-91642-am.png?trk=cndc-detail

尽管 OpenJDK 将保持免费状态并且可以在生产中使用,但是 Oracle 仅承诺在发行后六个月内支持和更新 Oracle Java 11 OpenJDK。所有后续支持和更新都归于开源社区。但众所周知,OpenJDK 社区的响应速度、更新频度等并不能够很好的满足企业关键业务支持的需要。

关于这个看法,我想引用 Micah Silverman ,一个拥有24年 Java 开发经验的 Java 老兵的一段话 –

“OpenJDK 构建给我带来的最大痛苦是,他们悲惨地落后于 Oracle JDK的 TLS 密码套件和 TLS 版本(1.1、1.2)的实现。但是,我从事的开源项目有一个大量暴露于各种加密算法和反向代理类型的工作负载,这些工作负载充分利用了这些东西,因此很可能无法代表其他人在尝试OpenJDK 时可能遇到的标准 Web 应用程序或微服务所遇到的问题类型,尤其是在 OpenJDK 11 和后来的版本更符合 Oracle JDK 版本。”

来源:https://aspiresoftware.in/blog/wp-content/uploads/2019/01/10824654-screen-shot-2018-12-05-at-91642-am.png?trk=cndc-detail

尽管 OpenJDK 将保持免费状态并且可以在生产中使用,但是 Oracle 仅承诺在发行后六个月内支持和更新 Oracle Java 11 OpenJDK。所有后续支持和更新都归于开源社区。但众所周知,OpenJDK 社区的响应速度、更新频度等并不能够很好的满足企业关键业务支持的需要。

关于这个看法,我想引用 Micah Silverman ,一个拥有24年 Java 开发经验的 Java 老兵的一段话 –

“OpenJDK 构建给我带来的最大痛苦是,他们悲惨地落后于 Oracle JDK的 TLS 密码套件和 TLS 版本(1.1、1.2)的实现。但是,我从事的开源项目有一个大量暴露于各种加密算法和反向代理类型的工作负载,这些工作负载充分利用了这些东西,因此很可能无法代表其他人在尝试OpenJDK 时可能遇到的标准 Web 应用程序或微服务所遇到的问题类型,尤其是在 OpenJDK 11 和后来的版本更符合 Oracle JDK 版本。”

来源:https://developer.okta.com/blog/2019/01/16/which-java-sdk?trk=cndc-detail

于是,在这样的局面之下 Amazon Corretto 应需而生。一方面是Amazon 自身对于数量巨大的 Java 应用的需要。在 Amazon 的系统框架之下,数千种生产服务上运行着 Corretto。这就要求 Corretto 的补丁程序和改进功能够满足 Amazon 解决大规模的、现实环境中的服务问题,从而满足强大的性能和可扩展性的需求。

此外也可以通过这个开源项目回馈给开源社区以及为数众多的 Java 开发者。Amazon 通过免费且长期的支持为用户提供这些功能,并每个季度更新一次,包括了错误修复和安全补丁。亚马逊云科技甚至还承诺在季度计划之外向客户提供紧急的修复。需要强调的是,Correto 承诺是长期支持(Long-term support,LTS)。这个长期支持包括了 Amazon 承诺至少在相关发行版本的指定日期(例如 Corretto 8 的承诺是2023年6月)之前免费提供性能增强和安全更新。

许多 Java 的用户已经表示出了对 Corretto 的极大兴趣,并有许多已经开始了迁移之旅。例如 FICO,这是一家位于加州圣何塞的数据分析公司,专注于信用评分服务。它的 FICO score,衡量消费者信贷风险的指标,已经成为美国消费者贷款的一个固定指标。他的的工程副总裁 Jeet Kaul 就这样表示过 –

“在 FICO,我们已经在很多服务中使用了 OpenJDK。有了 Amazon Corretto,我们不仅可以为云部署 Java,还可以跨所有部署和多个操作系统部署 Java,因为我们知道 Amazon 和社区支持 OpenJDK。我们从预览版开始就一直在评估 Corretto,并无缝地替换了我们的 Java 运行时。”

Amazon Corretto 启动

启动 Amazon Corretto 的最简单方法是在选择所需要平台并下载安装软件包。要注意 Java 的版本,Java 8 或者 Java 11:

Amazon Corretto 官网

https://aws.amazon.com/cn/corretto/?trk=cndc-detail

Amazon Corretto 8 的下载

https://docs.aws.amazon.com/zh_cn/corretto/latest/corretto-8-ug/downloads-list.html?trk=cndc-detail

Amazon Corretto 11 的下载

https://docs.aws.amazon.com/zh_cn/corretto/latest/corretto-11-ug/downloads-list.html?trk=cndc-detail

Amazon Corretto 8 源代码

https://github.com/corretto/corretto-8?trk=cndc-detail

Amazon Corretto 11 源代码

https://github.com/corretto/corretto-11?trk=cndc-detail

java -version

openjdk version “11.0.3” 2019-04-16 LTS

OpenJDK Runtime Environment Corretto-11.0.3.7.1 (build 11.0.3+7-LTS)

OpenJDK 64-Bit Server VM Corretto-11.0.3.7.1 (build 11.0.3+7-LTS, mixed mode)

Amazon Corretto 和 Open JDK 的合作

Amazon 在以往已经为 OpenJDK 8 做出了许多的贡献,并将在今后会与 OpenJDK 社区进行更紧密的合作,以实现 OpenJDK 8 和11的完善与增强。

如果针对 JDK 的修补程序在上游项目不能获得批准、延迟或不适合于 OpenJDK 项目,Amazon 将在提供增值服务的前提下将其提供给Corretto 的用户。如果在 OpenJDK 中以其他方式解决了此类问题,Amazon 也将在安全的前提下尽快解决该问题。

至于亚马逊云科技,在2019年已经让 Corretto 成为 Amazon Linux 上的默认 JDK。

结语

最后,总结一下 Amazon Corretto 的特性-

  • 免费,开源,多平台和可用于生产的JDK (GPL-2.0)

  • OpenJDK的下游发行版本

  • 免费长期支持 (LTS)

  • 至少每季度发布一次更新

  • 直接替换(直接替换现有的OpenJDK)

  • 多平台— Linux、Windows、macOS、Docker

  • 启用了技术兼容性套件(TCK),以确保与 Java SE 平台的兼容性

我们鼓励您使用 Corretto 来运行 Java 应用程序。预祝各位的 Amazon Corretto 体验愉快!

本篇作者:费良宏

费良宏,亚马逊云科技 Principal Developer Advocate。在过去的20多年一直从事软件架构、程序开发以及技术推广等领域的工作。他经常在各类技术会议上发表演讲进行分享,他还是多个技术社区的热心参与者。他擅长 Web 领域应用、移动应用以及机器学习等的开发,也从事过多个大型软件项目的设计、开发与项目管理。目前他专注与云计算以及互联网等技术领域,致力于帮助中国的 开发者构建基于云计算的新一代的互联网应用.

文章来源:https://dev.amazoncloud.cn/column/article/62b5200829f7d21bb15e04aa?sc_channel=CSDN

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

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

相关文章

Allegro172版本如何通过规则设置检查器件的热平衡问题

Allegro172版本如何通过规则设置检查器件的热平衡问题 在做PCB设计的时候,器件的热平衡问题是必须考虑到的一个设计要点,尤其小封装的阻容器件,热平衡问题没有考虑好,直接影响到装配的可靠性 如下图 小封装器件,一边线宽粗并且铺铜,另外一端是一根细线 Allegro172及以上…

c语言指针怎么理解 第一部分

不理解指针,是因为有人教错了你。 有人告诉你,指针是“指向”某某某的,那就是误导你,给你挖了个坑。初学者小心不要误读这“指向”二字。 第一,“指针”通常用于保存一个地址,这个地址的数据类型在定义指…

ASGCN之依存句法图的构建

文章目录前言1.理论部分1.1 依存句法理论1.2 依存句法分析1.3 依存句法的应用2. 代码实践2.1 数据集2.2 代码实现2.3 效果查看总结前言 本文首先介绍依存句法理论,之后通过代码实现ASGCN中的依存句法图数据的构建。 1.理论部分 1.1 依存句法理论 词与词之间存在主…

Vue3电商项目实战-购物车模块2【04-头部购物车-商品列表-本地、05-头部购物车-删除操作-本地、06-购物车页面-基础布局】

文章目录04-头部购物车-商品列表-本地05-头部购物车-删除操作-本地06-购物车页面-基础布局04-头部购物车-商品列表-本地 目的:根据本地存储的商品获取最新的库存价格和有效状态。 大致步骤: 定义获取最新信息的API定义修改购物车商品信息的mutations定义…

Mybatis工作原理及流程

1、MyBatis介绍 MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和JavaPOJO(PlainOldJavaObjects,普通老式Java对象)为…

OSSFs挂载工具简介

OSSFs挂载工具 OSSFs挂载工具简介 ​ ossfs允许您在Linux系统中将对象存储OSS的存储空间(Bucket)挂载到本地文件系统。挂载完成后,您能够像操作本地文件一样操作OSS的对象(Object),从而实现数据共享。 ​…

RT_Thread Nano 简介, 移植

官网介绍 RT_Thread Nano 1.简介 RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小,功能包括…

打怪升级之MFC变量小实验

按惯例,这一篇文章主要还是作者读《深入浅出MFC》整理的一些笔记。不过本次还加上了一些作者自己的理解。 实验的前期准备 做实验前,你最好了解一下MFC的执行流程,从winapp到各类控件的实际变化过程,可以参考博主之前的笔记。 …

SOTA!目标检测开源框架YOLOv6 3.0版本来啦

近日,美团视觉智能部发布了 YOLOv6 3.0 版本,再一次将目标检测的综合性能推向新高。YOLOv6-L6 检测精度和速度超越 YOLOv7-E6E,取得当前实时目标检测榜单 SOTA。本文主要介绍了 YOLOv6 3.0 版本中引入的技术创新和优化,希望能为从…

64. 最小路径和

64. 最小路径和 给定一个包含非负整数的 m∗nm * nm∗n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 1: 输入:grid [[1,3,1],[1,5,1],[…

Hudi的7种索引

1、Bloom Index Bloom Index (default) 使用根据记录键构建的bloom过滤器,也可以使用记录键范围修剪候选文件.原理为计算RecordKey的hash值然后将其存储到bitmap中,为避免hash冲突一般选择计算3次 HoodieKey 主键信息:主要包含recordKey 和p…

[ IFRS 17 ] 新准则下如何确认保险合同

本系列文章:[ IFRS 17 ] 针对保险新准则 IFRS 17 进行一些列文章更新。如若文中如有所疑问或者不同见解,欢迎留言互动交流。 注:本系列文章受众群体较小众,如若对你感到不适,请立刻点击右上角的 【】 本系列文章适用…

RDD持久化原理和共享变量

(一) RDD持久化原理 Spark中有一个非常重要的功能就是可以对RDD进行持久化。当对RDD执行持久化操作时,每个节点都会将自己操作的RDD的partition数据持久化到内存中,并且在之后对该RDD的反复使用中,直接使用内存中缓存…

互联网工程师 1480 道 Java 面试题及答案整理 ( 2023 年 整理版)

最近很多粉丝朋友私信我说:熬过了去年的寒冬却没熬过现在的内卷;打开 Boss 直拒一排已读不回,回的基本都是外包,薪资还给的不高,对技术水平要求也远超从前;感觉 Java 一个初中级岗位有上千人同时竞争&#…

安卓逆向_4 --- 定位关键Smali、monitor使用、log插桩、栈追踪、methodprofiling(方法分析)

1、快速定位关键 smali 代码 1.分析流程 搜索特征字符串 搜索关键api 通过方法名来判断方法的功能 2.快速定位关键代码 反编译 APK 程序,AndroidManifest.xml > 包名/系统版本/组件 程序的主 activity(程序入口界面) 每个…

Allegro如何画半圆形的线操作指导

Allegro如何画半圆形的线操作指导 在用Allegro设计PCB的时候,在某些应用场合会需要画半圆形,如下图 如何画半圆形,具体操作如下 点击Add点击Arc w/Radius

WebRTC QoS方法之Pacer实现

本文将解读WebRTC中Pacer算法的实现。WebRTC有两套Pacer算法:TaskQueuePacedSender、PacedSender。本文仅介绍PacedSender的实现。(文章中引用的WebRTC代码基于master,commit:3f412945f05ce1ac372a7dad77d85498d23deaae源码分析&a…

算法练习(八)区域搜索

一、腐烂的橘子 1、题目描述: 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的…

从零开始:学习使用 Hugo 构建自己的静态网站

1、什么是 Hugo 1.1、简介 Hugo 是一个由 Go 语言编写的静态网站生成器。它可以帮助用户快速构建高性能的静态网站,特别是博客、文档和个人网站等。与其他静态网站生成器相比,Hugo 的特点是速度快、易于使用、可扩展性强等。Hugo 使用简单的 Markdown …

【项目】游戏-我在万科转生成了一只狗

文章目录学习unity一些基操..位置坐标系父子关系常用工具导入游戏模型资源商店创建地形为地形化妆--纹理绘制脚本组件脚本的生命周期脚本执行顺序标签和图层的作用向量的运算和意义欧拉角和四元数-常用C#预制体-类与对象Debug的使用C#物体属性使用游戏时间使用-C#计时器的设置路…