这篇文章主要介绍了Java中的OpenJDK使用原理,OpenJDK是Java的开发工具包,关于Java为什么要使用它文章作简单介绍,感兴趣的朋友可以参考一下
前言:
OpenJDK是Java的开发工具包,Java有着26年的历史。从任何标准来看,它都不是一种新的语言,尤其是在行业中,每隔几年就会出现新的解决方案,而且通常比以前的解决方案更好。而最流行的Java实例OpenJDK已经有14年的历史了。无论如何,OpenJDK应该已经被替换了很多次了。但它仍然是世界上最流行的开发工具之一!这怎么会发生?
在本文中,我们将尝试回答这个问题,深入研究OpenJDK的不断升级过程,讨论开源开发方法,并描述使Java如此独特的所有因素。
Java和OpenJDK的特殊之处是什么?
OpenJDK是如何产生的
Java的历史始于1991年,当时Sun Microsystems的工程师对C和C++编程语言的限制和API感到失望。该语言的原型最初命名为“Oak”,后来改名为Java。
它于1994年首次可供下载,1995年首次公开发布,几乎立即在当时流行的网景浏览器中获得支持。
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规范而创建的,因此它拥有您所需要的一切,不仅可以有效地编写代码,还可以检查和利用其他人的工作。实现新技术的新编程方法,如交换机模式匹配和向量API,正在不断实现。
Java是健壮和安全的
作为一个开源项目,OpenJDK的代码可供任何想要检查或增强其安全性的人使用。这意味着新发现的漏洞将不断通过每季度的CPU版本进行修补,对于Liberica JDK,我们的支持人员将修复这些漏洞。
而且,有了广泛的安全工具选择,如漏洞扫描器,您可以确保破坏应用程序和基础设施安全的尝试不会成功。
Java是高性能的
有很多方法可以提升您的OpenJDK应用程序。JVM中的编译器优化代码以获得最佳性能。如果启动时间更重要,则可以使用GraalVM本机映像技术,将应用程序与运行时打包到单个可执行二进制文件中。
OpenJDK是如何开发的
OpenJDK作为太空竞赛的基础
您可以将编程语言与发射宇宙飞船的太空港进行比较。当开发人员构建他们的应用程序“宇宙飞船”时,他们希望基础设施能够工作并使他们的生活更加轻松。这意味着编程平台和运行时功能上的每一个错误都会使他们陷入危险的境地,因为他们做的一切都是对的,但发射失败了,造成了时间和金钱的浪费。
那么他们为什么选择OpenJDK呢?因为它是由一个可靠的大型社区管理的“太空港”。
让我们了解一下OpenJDK中的一切工作原理。
OpenJDK的升级过程
OpenJDK的开发可以分为几个方向:
- Bug修复;
- 新功能的实施和过时功能的弃用;
- 主要分支机构以外的项目。
让我们深入讨论它们。
错误修复
今天,当GitHub用于OpenJDK开发时,这个过程大部分是自动化的,比以前快了很多。为了报告新发现的错误,开发人员使用邮件列表来描述错误,然后给出一个数字。。
当开发人员希望修复bug时,他们会在存储库中创建一个fork,它基本上是整个项目的副本。然后在这个fork中,开发人员编辑代码的必要部分来修复bug。测试成功后,他们会发出将新代码拉回主分支的请求。然后对代码进行审查,如果符合要求,则将其实现到OpenJDK下一版本的主分支中。该系统允许任何开发人员尝试修复任何发现的bug。
新功能的实施和过时功能的弃用
新特性通常通过几个步骤来实现。首先,它是由开发人员作为概念(草案)提出的。名为OpenJDK lead的管理委员会成员决定该功能是否值得开发。
批准后,草案更新了必要的说明和基本实施建议,成为JEP(JDK增强建议)。它在完成之前经历了许多阶段。
实现过程本身类似于前面描述的bug修复,是通过GitHub上的fork分支完成的。由于新功能分阶段发布,此过程可能需要很长时间才能完成。预览涉及语义和语法,孵化器一 API更改。在该功能的最终实现发布之前,可能会有多达3个预览或孵化器。这样做是为了让开发人员能够测试新功能,并查看它与新代码和现有代码的配合情况,以免破坏已经在工作的应用程序。通常在两次预览或孵化器之后,新代码要么以最终形式添加到版本中,要么在被认为不安全或性能不佳时删除。
主要分支机构以外的项目
一些对Java功能影响很大的项目是在主分支之外开发的。如果成功的话,他们会彻底改变语言,但他们需要很多时间来完善。如果需要,它们仍然可以在当前状态下实现到OpenJDK中,一些开发人员通常会这样做。随着时间的推移,它们将成为JEP,并成为下一版本的一部分。
规范变更
以JSR的形式提出并开发规范升级一 Java规范请求。这些都要经过由指导Java技术发展的公司和人员组成的执行委员会的公开审查和投票。BellSoft与阿里巴巴、亚马逊、IBM、英特尔和甲骨文等公司也是该委员会的一员。
释放节奏
OpenJDK有三种类型或版本:
- 之前讨论过的季度CPU发布。它是在考虑安全性的基础上构建的,由漏洞和bug修复组成。
- 技术发布一 带有新功能的编号版本,主要用于试用。对于开发人员来说,测试新技术、让他们的应用程序为旧技术的弃用做好准备,以及规划他们未来的工作都很有用。
- LTS(长期支持)编号的版本。这些都是经过测试的实现,将得到供应商最长时间的支持。它们是在企业环境中开发和运行程序的基础。
在2017年Java 9发布之前,可能需要将近5年的时间才能推出新的编号版本。从那以后,Oracle转向了新的发布cadence,每年发布两个编号的版本,每两年发布一个新的LTS版本。Java 17是最新的LTS版本,下一个版本将于2023年9月发布Java 21,以下版本将每两年发布一次。
支持本身由许多供应商提供,包括BellSoft,新版本的Liberica JDK与其他主要发行版同时发布。
为什么开源优于闭源
必须记住,OpenJDK是一个开源项目。这很重要,因为所有封闭源代码的替代方案本质上都是黑盒子。理论上他们会更安全吗?对但从理论上讲,它们可能包含大量无人知晓的漏洞……或者可能除了那些已经利用这些漏洞与开发人员窃取资金或信息的数据窃贼之外,没有人知道。
在开源中,这是不可能的。你总是知道什么有效,什么无效,以及为什么。当然,恶意参与者可以研究代码,但大量开发人员和安全管理人员也可以!所有漏洞都会很快被发现并修复。所有加密算法和安全措施都可供测试。
还有一件事一 如果你认为你能做得更好一 你可以直接去做!这就引出了下一个问题。
为什么有那么多OpenJDK供应商和实现?
除了原始的OpenJDK之外,还有许多供应商出售或免费提供自己的版本,包括生产Liberica JDK的BellSoft。为什么有这么多可供选择,有什么区别?
答案很简单一 功能、安全和支持。所有Java开发工具包,包括Oracle Java SE,都基于OpenJDK。它们都可以按预期的方式运行Java代码,并且在一切正常的情况下,它们是相似的。当出现问题时,差异就会出现。
结论
OpenJDK是一个惊人的应用程序开发平台,它只会随着年龄的增长而变得更好!
到此这篇关于Java中的OpenJDK使用原理的文章就介绍到这了,更多相关 Java OpenJDK 内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:Java中的OpenJDK使用原理
基础教程推荐
- Java并发编程进阶之线程控制篇 2023-03-07
- Java实现线程插队的示例代码 2022-09-03
- springboot自定义starter方法及注解实例 2023-03-31
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- java实现多人聊天系统 2023-05-19
- Java数据结构之对象比较详解 2023-03-07
- Java文件管理操作的知识点整理 2023-05-19
- java基础知识之FileInputStream流的使用 2023-08-11
- Java实现查找文件和替换文件内容 2023-04-06