Java中的OpenJDK使用原理

目录
  • Java和OpenJDK的特殊之处是什么?
    • OpenJDK是如何产生的
    • OpenJDK的工作原理和优点是什么
    • Java语言与体系结构无关,JVM是可移植的
    • Java很简单,面向对象,大家都很熟悉
    • Java是健壮和安全的
    • Java是高性能的
  • OpenJDK是如何开发的
    • OpenJDK作为太空竞赛的基础
    • OpenJDK的升级过程
    • 错误修复
    • 新功能的实施和过时功能的弃用
    • 主要分支机构以外的项目
    • 规范变更
    • 释放节奏
    • 为什么开源优于闭源
    • 为什么有那么多OpenJDK供应商和实现?
  • 结论

前言:

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 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在CentOS系统上安装Java的openjdk的方法

    CentOS 6.X 和 5.X 自带有OpenJDK runtime environment  (openjdk).它是一个在linux上实现开源的java 平台.CentOS  yum 命令 安装 Java SDK openjdk centos linux JAVA(openjdk)软件包名 1.java-1.7.0-openjdk - OpenJDK Runtime Environment 2.java-1.7.0-openjdk-devel - OpenJDK Development E

  • Java中的OpenJDK使用原理

    目录 Java和OpenJDK的特殊之处是什么? OpenJDK是如何产生的 OpenJDK的工作原理和优点是什么 Java语言与体系结构无关,JVM是可移植的 Java很简单,面向对象,大家都很熟悉 Java是健壮和安全的 Java是高性能的 OpenJDK是如何开发的 OpenJDK作为太空竞赛的基础 OpenJDK的升级过程 错误修复 新功能的实施和过时功能的弃用 主要分支机构以外的项目 规范变更 释放节奏 为什么开源优于闭源 为什么有那么多OpenJDK供应商和实现? 结论 前言: Op

  • Java中GC的工作原理详细介绍

    Java中GC的工作原理 引子:面试时被问到垃圾回收机制,只是粗略的讲'程序员不能直接对内存操作,jvm负责对已经超过作用域的对象回收处理',面官表情呆滞,也就没再继续深入. 转文: 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能提高整个应用程序的性能.本文将从GC的工作原理.GC的几个关键问题进行探讨,最后提出一些Java程序设计建议,如何从GC角度提高Ja

  • java 中volatile和lock原理分析

    java 中volatile和lock原理分析 volatile和lock是Java中用于线程协同同步的两种机制. Volatile volatile是Java中的一个关键字,它的作用有 保证变量的可见性 防止重排序 保证64位变量(long,double)的原子性读写 volatile在Java语言规范中规定的是 The Java programming language allows threads to access shared variables (§17.1). As a rule,

  • java中注解机制及其原理的详解

    java中注解机制及其原理的详解 什么是注解 注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包.类.接口.字段.方法参数.局部变量等进行注解.它主要的作用有以下四方面: 生成文档,通过代码里标识的元数据生成javadoc文档. 编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证. 编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码. 运行时动态处理,运行时通过代码里标识

  • 详解Java 中泛型的实现原理

    泛型是 Java 开发中常用的技术,了解泛型的几种形式和实现泛型的基本原理,有助于写出更优质的代码.本文总结了 Java 泛型的三种形式以及泛型实现原理. 泛型 泛型的本质是对类型进行参数化,在代码逻辑不关注具体的数据类型时使用.例如:实现一个通用的排序算法,此时关注的是算法本身,而非排序的对象的类型. 泛型方法 如下定义了一个泛型方法, 声明了一个类型变量,它可以应用于参数,返回值,和方法内的代码逻辑. class GenericMethod{ public <T> T[] sort(T[]

  • Java中枚举的实现原理介绍

    目录 基本概述 使用方式 条件选择 循环遍历 集合映射 常用方法 总结 基本概述 在 JDK1.5 之前,通过定义常量使用的都是:public static fianl.而枚举的设计,就是把相关的常量分组到一个枚举类型里,方便创建和管理. 比如我们要定义一个颜色常量: public enum Colour { RED, YELLOW, BLUE, GREEN } 这段代码通过底层编译后,实际创建了4个枚举对象: new Enum<EnumTest>("RED", 0); n

  • 详解Java中AC自动机的原理与实现

    目录 简介 工作过程 数据结构 初始化 构建字典树 构建失败指针 匹配 执行结果 简介 AC自动机是一个多模式匹配算法,在模式匹配领域被广泛应用,举一个经典的例子,违禁词查找并替换为***.AC自动机其实是Trie树和KMP 算法的结合,首先将多模式串建立一个Tire树,然后结合KMP算法前缀与后缀匹配可以减少不必要比较的思想达到高效找到字符串中出现的匹配串. 如果不知道什么是Tire树,可以先查看:详解Java中字典树(Trie树)的图解与实现 如果不知道KMP算法,可以先查看:详解Java中

  • Java中的Kotlin 内部类原理

    目录 Java 中的内部类 OutterJava.class InnJava.class Kotlin 中的内部类 总结 Java 中的内部类 这是一个 Java 内部类的简单实现: public class OutterJava {    private void printOut() {        System.out.println("AAA");   } ​    class InnJava {        public void printInn() {        

  • Java中Prime算法的原理与实现详解

    目录 Prim算法介绍 1.点睛 2.算法介绍 3. 算法步骤 4.图解 Prime 算法实现 1.构建后的图 2.代码 3.测试 Prim算法介绍 1.点睛 在生成树的过程中,把已经在生成树中的节点看作一个集合,把剩下的节点看作另外一个集合,从连接两个集合的边中选择一条权值最小的边即可. 2.算法介绍 首先任选一个节点,例如节点1,把它放在集合 U 中,U={1},那么剩下的节点为 V-U={2,3,4,5,6,7},集合 V 是图的所有节点集合. 现在只需要看看连接两个集合(U 和 V-U)

  • Java中的 HTTP 协议原理详解

    目录 前言 1.HTTP 特点 2.HTTP 组成 2.1 请求对象 2.1.1 请求行 2.1.2 请求报头 2.1.3 空行 2.1.4 请求正文 2.2 响应对象 2.2.1 状态行 2.2.2 响应报头 2.2.3 空行 2.2.4 响应正文 总结 前言 HTTP(Hyper Text Transfer Protocol)超文本传输协议,下文简称 HTTP,它的作用是用于实现服务器端和客户端的数据传输的.它可以传输任意的数据类型,如文本.HTML.图片.文件.声音等类型. 简单来说,HT

随机推荐