OpenJDK 是 Java 的开发工具包,这门语言背后有 26 年的历史。从任何标准来看,它都不是一门新语言,尤其是在每隔几年就会出现新解决方案并且通常比其前辈更好的行业中。而最流行的 Java 实例 OpenJDK 已经 14 岁了。无论如何,OpenJDK 应该已经被替换过很多次了。然而,它仍然是世界上最流行的开发工具之一!这怎么可能发生?
在本文中,我们将尝试回答这个问题,深入探讨 OpenJDK 不断升级的过程,谈论开源的开发方式,并描述所有让 Java 如此独特的东西。
Java 和 OpenJDK 有何特别之处?
OpenJDK 是如何诞生的
Java 的历史始于 1991 年,当时 Sun Microsystems 的工程师对 C 和 C++ 编程语言的限制和 API 感到沮丧。该语言的原型最初被命名为“Oak”,后来更名为 Java。
它于 1994 年首次可供下载,并于 1995 年首次公开发布,并且几乎立即获得了当时流行的 Netscape 网络浏览器的支持。
2006 年,Sun 在 GNU 通用公共许可证下作为免费软件发布了 Java HotSpot 虚拟机和编译器,从那时起,OpenJDK 的历史开始于 Java 6 和 7 的开源。在 2006 年和 2008 年期间,越来越多的代码被打开。
目前,任何人都可以使用 OpenJDK 的代码,并且由位于 Oracle 周围的大型社区开发。OpenJDK有很多发行版,包括由 BellSoft 构建的 Liberica JDK,它也可以免费供任何人按照开源方式探索和使用。
OpenJDK 的工作原理和优势是什么
Java 诞生之初就形成了几个目标,包括:
Java 简单、面向对象且熟悉。
Java 是健壮和安全的。
Java 语言是体系结构中立的,而 JVM 是可移植的。
Java能够以高性能执行。
这些原则仍然是使 OpenJDK 流行的原因,因此探索它们并了解它们如何影响开发人员和最终用户的生活非常重要。
Java 是体系结构中立的,JVM 是可移植的
Java 代码是架构中立的,这意味着如果编写得当,它可以在任何设备上启动,从 PC 到现代微波炉。这可以通过利用 Java 一 JVM、Java 虚拟机、用于执行应用程序的运行时的最重要特性来实现。
通常,大多数编程语言将其代码编译为机器代码,这对于任何平台都是不同的。Java 编译器的工作方式不同,它创建特殊的“java 字节码”,可以由运行在任何系统上的 Java 虚拟机执行。
JVM 反过来使用动态编译器在应用程序执行期间编译代码。
这种方法允许在完全不同的平台上运行相同的代码,几乎不需要重写!没错,您可以编写一次程序,然后在任何地方执行它,只要您遵循指南。因此,如果您想使用现代微波炉的触摸屏来玩俄罗斯方块(或统治世界),Java 是最简单的语言!
但说真的,这种称为“一次编写,随处运行”的方法使您不必处理不同的架构、操作系统、驱动程序或硬件。您唯一需要做的就是将虚拟机用于所选平台。
Java 简单、面向对象且熟悉
如今,Java 语法不再是最简单的了……至少现在是这样,因为有许多新功能正在开发中,使代码更易于阅读和编写。然而,在它的构思之时,它比它的竞争对手更有条理。Java 语言规范是一组规则,可确保所有创新都遵循相同的逻辑并根据 Java 意识形态创建。
所有的 API 都是为了相互兼容和 Java 规范而创建的,因此它拥有您需要的一切,不仅可以有效地编写代码,还可以检查和利用其他人的工作。实现新技术的新编程方法,例如开关和 Vector API 的模式匹配,正在不断实现。
Java 强大且安全
作为一个开源项目,任何想要检查或增强其安全性的人都可以使用 OpenJDK 的代码。这意味着新发现的漏洞会不断通过每季度的 CPU 版本进行修补,对于 Liberica JDK 的情况,我们的支持已修复。
借助漏洞扫描程序等多种安全工具,您可以确保破坏您的应用程序和基础设施安全的尝试不会成功。
Java 是高性能的
有很多方法可以提升您的 OpenJDK 应用程序。JVM 内的编译器优化代码以获得最佳性能。如果启动时间更重要,您可以使用 GraalVM 原生映像技术,将应用程序与运行时一起打包成一个可执行的二进制文件。
OpenJDK 是如何开发的
OpenJDK 作为太空竞赛的基础
您可以将编程语言与发射宇宙飞船的太空港进行比较。当开发人员构建他们的应用程序“宇宙飞船”时,他们希望基础设施能够正常工作并使他们的生活更轻松。这意味着编程平台和运行时的每一个错误都会让他们陷入危险境地,当他们做对了一切,但启动失败,造成时间和金钱的浪费。
那么他们为什么选择 OpenJDK 呢?因为它是由可靠的大型社区管理的“太空港”。
让我们看看 OpenJDK 中的一切是如何工作的。
OpenJDK升级过程
OpenJDK的发展可以分为几个方向:
错误修复。
新功能的实现和过时功能的弃用。
主分支之外的项目。
让我们深入讨论它们。
错误修复
今天,当 GitHub 用于 OpenJDK 开发时,该过程大部分是自动化的,并且比以前快得多。为了报告新发现的错误,开发人员使用邮件列表来描述错误,然后给它一个编号。
当开发人员希望修复错误时,他们会在存储库中创建一个分支,这基本上是整个项目的副本。然后在这个分叉中,开发人员编辑代码的必要部分以修复错误。成功测试后,他们使用新代码向主分支发出拉取请求。
然后审查代码,如果满意,将其实施到 OpenJDK 的下一个版本的主分支中。该系统允许任何开发人员尝试修复任何发现的错误。
新功能的实现和过时功能的弃用
新功能通常通过几个步骤实现。
首先,它是由开发人员作为概念(草案)提出的。称为 OpenJDK 领导的管理委员会成员决定该功能是否值得开发。
批准后,草案被更新为必要的描述和基本实现的提议,成为JEP(JDK Enhancement Proposal)。它在完成之前经历了许多阶段。
实现过程本身类似于前面描述的错误修复,是通过 GitHub 上的 fork 分支完成的。由于新功能分阶段发布,此过程可能需要很长时间才能完成。预览版处理语义和语法,孵化器处理 API 更改。在该功能的最终实施发布之前,可能会有多达 3 个预览版或孵化器。这样做是为了让开发人员可以测试新功能并查看它与新代码和现有代码的配合情况,以免破坏已经工作的应用程序。通常,在 2 次预览或孵化器之后,新代码要么以最终形式添加到版本中,要么在被认为不安全或性能不佳时被删除。
总支外的项目
一些对 Java 功能影响很大的项目是在主分支之外开发的。如果成功,它们会彻底改变语言,但需要花费大量时间来完善。如果需要,它们仍然可以在当前状态下实现到 OpenJDK 中,并且一些开发人员通常会这样做。随着时间的推移,它们成为 JEP 和下一个版本的一部分。
规格变更
规范升级以 JSR 一 Java Specification Request 的形式提出和开发。这些要经过由指导 Java 技术发展的公司和人员组成的执行委员会的公开审查和投票。贝尔软件- 我们!- 与阿里巴巴、亚马逊、IBM、英特尔和甲骨文等公司一起,也是该委员会的成员。
发布节奏
OpenJDK 有 3 种或版本:
之前讨论过的季度 CPU 发布。它在构建时考虑了安全性,包括漏洞和错误修复。
技术版本 一带有新功能的编号版本,主要用于试用它们。对于开发人员来说,测试新技术、让他们的应用程序为弃用旧技术做好准备以及规划他们未来的工作是很有用的。
LTS(长期支持)编号版本。这些都是经过测试的实现,将在最长时间内得到供应商的支持。它们旨在成为在企业环境中开发和运行程序的基础。
在 2017 年 Java 9 发布之前,可能需要将近 5 年的时间才能发布一个新的编号版本。从那时起,Oracle 切换到新的发布节奏,每年发布两个编号版本,每两年发布一个新的 LTS 版本。Java 17 是最新的 LTS 版本,下一个将是 2023 年 9 月的 Java 21,之后每两年发布一次。
支持本身由包括 BellSoft 在内的许多供应商提供,新版本的 Liberica JDK 与其他主要发行版同时发布。
为什么开源优于闭源
重要的是要记住 OpenJDK 是一个开源项目。这很重要,因为所有封闭源代码的替代品本质上都是黑匣子。理论上它们会更安全吗?是的。但是,从理论上讲,它们可能包含大量没人知道的漏洞……或者除了已经使用这些漏洞与开发人员窃取资金或信息的数据窃贼之外没有人知道。
在开源中,这是不可能的。你总是知道什么有效,什么无效,以及为什么。当然,恶意行为者可以研究代码,但大量开发人员和安全管理人员也可以!所有漏洞都很快被发现并修复。所有加密算法和安全措施都可用于测试。
还有一件事——如果你认为你可以做的比已经做的更好——你可以继续去做!
这将我们引向下一个问题。
为什么有这么多 OpenJDK 供应商和实现?
除了原始的 OpenJDK 之外,还有很多供应商出售或免费提供自己的构建版本,包括制造 Liberica JDK 的 BellSoft。为什么有这么多可供选择,有什么区别?
答案很简单——功能、安全和支持。所有 Java 开发工具包,包括 Oracle Java SE,都基于 OpenJDK。它们都可以按照预期的方式运行 Java 代码,并且在一切正常时它们是相似的。当出现问题时,差异就会出现。
如果您在企业中使用 OpenJDK,并且遇到问题,您需要专家来处理它。您要么必须让自己的团队致力于维护 OpenJDK 的稳定性(成本高昂且并非总是必要的),要么联系可以提供帮助的人。对于 OpenJDK,您需要通过前面描述的所有渠道来修复错误或获得答案并排队等候。
现在,供应商在那里帮助他们的客户。他们中的一些人高效而快速地做到这一点,有些人要求你先与经理和律师交谈,花时间让你赔钱。OpenJDK 构建(如 Liberica JDK)的其他优点是额外的安全增强和功能,使您的应用程序更加安全。
结论
OpenJDK 是一个了不起的应用程序开发平台,它只会随着年龄的增长而变得更好!
我们邀请您加入每天使用 Java 的大型开发人员社区。我们每个人都在努力让它变得更好,这是 Java 将在多年后继续存在的最好保证。