Java小史:JDK现状

简介: 简单说一下现在主流的JDK

1.简介

JDK 有多个构建版本,而实际只有一组源代码,即 OpenJDK,使用分布式版本控制系统 Mercurial 托管在 OpenJDK。Sun Microsystems公司在2006年的JavaOne大会上称将对Java开放源代码,于2009年4月15日正式发布OpenJDK。任何人都可以获取这些源码,并用其构建一个变种版本进行发布。当然需要一个独有的认证程序来确保构建的变种版本是有效的,这个认证程序是由 JCP(Java Community Process)组织审核的,该组织会提供一套技术兼容性工具包 TCK(Technology Conformance Kit)。如果你构建了一个 OpenJDK 的变种版本,并通过了 TCK 的兼容性测试,则可以将该变种版本称为“Java SE Compatible”(兼容 Java SE 的 JDK)。

New Relic2022调研 大部分开发人员还是会从Oracle获得JDK,而OpenJDK项目中的开源内容已经产生了丰富的选择

image.png

2.国外JDK介绍

2.1 OpenJDK

OpenJDK是Java的开发环境(JDK)的开源版本,完全自由,开放源码。基于 GPL 协议开源,基于 GPL 协议开源。Sun Microsystems公司在2006年的JavaOne大会上称将对Java开放源代码,于2009年4月15日正式发布OpenJDK。甲骨文在2010年收购Sun Microsystem之后接管了这个项目。Oracle 提交的源代码衍生出 Oracle JDK 和 Oracle OpenJDK 不同的编译版本,从 Java 11 开始,两者的特性差异已经最小化,差异部分大多是 Oracle 的商业特性。但 Oracle OpenJDK 大版本发布后,Oracle 对其最多会有两次安全补丁的升级(发布后的六个月内),之后不再负责该大版本维护,如果用户想持续获得安全升级,需要及时更新到新的大版本。由于 Oracle OpenJDK 是开源的,因此可以直接基于源码编译出社区版 JDK,甚至可以加入自定义特性并商业化。值得一提的是,在安全补丁级别相同的情况下,Oracle JDK 并不比 OpenJDK 更好。如果不需要商业支持或企业管理工具,可以选择使用 Oracle OpenJDK 构建版本。

2016年8月22日,Google在Android 7.0 Nougat中,将专利的JDK替换成开源方案的OpenJDK,以彻底解决Java的专利问题。

image.png

2.2 Oracle JDK

Oracle JDK 是Java官方Oracle公司基于OpenJDK构建,收费。就是之前的 Sun JDK,被 Oracle 收购后命名为 Oracle JDK,由 Oracle 的团队维护。从 Java 11 开始提供付费的商业支持,当然个人或非商业用途仍然可以享受免费支持。但现阶段还没有单独针对 Oracle JDK 的付费策略,基本是和 Oracle 的其它商业产品绑定,Oracle 计划在 2026 年后提供全额付费的服务支持。Oracle JDK 在8u212 版本之后是收费的。

image.png

2.3 其他国外JDK

Amazon Corretto

Amazon Corretto 是亚马逊云基于OpenJDK构建,收费。

Eclipse Temurin

Eclipse Temurin(曾用名:AdoptOpenJDK) 是Eclipse基金会基于OpenJDK的构建,支持Oracle公司的HotSpot虚拟机和Eclipse基金会的OpenJ9虚拟机,免费。

Azul Zulu OpenJDK

Azul Zulu OpenJDK 是总部位于加州桑尼维尔的Azul公司基于OpenJDK的构建,免费。

Red Hat build of OpenJDK

Red Hat build of OpenJDK 是Red Hat(红帽子)公司基于OpenJDK的构建,免费。它通常被集成在 Red Hat 的操作系统中(RHEL, Red Hat Enterprise Linux)。提供商业付费支持。

BellSoft Liberica JDK

BellSoft Liberica JDK 是由OpenJDK的贡献者之一BellSoft基于OpenJDK的构建,免费。

SAP SapMachine

SAP SapMachine 是OpenJDK 项目的贡献者之一SAP公司基于OpenJDK的构建,免费。

Microsoft Build of OpenJDK

Microsoft Build of OpenJDK 是微软公司基于OpenJDK的构建,免费。

3. 国内JDK介绍

3.1 阿里巴巴Dragonwell JDK

Alibaba Dragonwell 是阿里巴巴公司基于OpenJDK的构建,免费。阿里巴巴Dragonwell没有通过TCK测试

Alibaba Dragonwell 会针对 Long Term Support(LTS) 提供 Java 8 、Java 11 和Java17版本

Dragonwell随阿里云 VM 镜像发布,免费提供给阿里云客户使用;

龙井 (dragonwell-jdk.io)

image.png

生产和安全

阿里巴巴Dragonwell包括来自上游的最新错误修复和secutiry补丁,并提供了在阿里巴巴生产环境中广泛使用的额外功能。

性能

作为阿里巴巴Java应用的引擎,Dragonwell支持阿里巴巴经济中的所有Java业务,在业务场景中积累了大量的实践和创新。

云原生

在 JWarmup 和 ElasticHeap 的帮助下,您的应用程序将消耗更少的预热时间和内存占用。

工具

集成JFR,Java Mission Control和一系列实用的监控和故障排除工具。

3.2 腾讯Kona JDK

腾讯 Kona(Tencent Kona) 是腾讯公司基于OpenJDK的构建,免费。2019年11月正式开源。腾讯 Kona(Tencent Kona,TK)是完全开源、生产环境就绪的 OpenJDK 发行版,完全兼容开源 OpenJDK8、OpenJDK11 及 OpenJDK17。腾讯 Kona 基于 TencentJDK 开发,支持多种运行平台,同时针对云应用场景定制新的功能及优化, 具备更快的云应用启动速度,更好的性能以及提供更为便捷的分析、诊断工具。此外,腾讯 Kona 服务于腾讯内部大量 Java 应用程序,提供稳定、高效的 Java 运行环境。腾讯Kona连续四次对OpenJDK开源社区贡献全国第一(JDK15~18)

image.png

image.png

低成本

腾讯 Kona 完全开源,企业版提供额外企业级订阅与技术支持服务,满足您的多样性业务需求,并提供极具竞争力的价格。

高性能

结合云计算 Java 场景与特点,腾讯 Kona 进行有针对性的优化,持续改进 GC、JIT 等引擎,指令级别优化,支持腾讯大数据、云等各类业务的 Java 性能提升、latency SLA 提高,稳定支撑内部超百万核级业务。您可以享受到腾讯 Kona 带来的启动速度、性能以及存储方面的提升。

高可靠

腾讯 Kona 全兼容 OpenJDK,经海量生产负载验证,由腾讯专业团队进行长期维护,提供 JDK 层面技术保障,保证 Java 业务平稳运行。

安全性强

腾讯 Kona 团队紧密跟踪 OpenJDK 社区及业界安全漏洞,及时发现及修复安全问题,保障您业务的安全坚固。

支持多平台

多平台支持(64位 ARM 与 X86 平台),经过多项兼容性评测。

支持国密改造

提供国密算法支持,降低国密改造的成本。

定制化适用云场景

腾讯 Kona 专为云而生,针对云业务特点进行定制化功能开发及优化, 在保证稳定安全的同时,为您提供高效的云环境。

丰富的分析工具

腾讯 Kona 具备丰富的线上、线下分析工具、监控工具和调试工具, 为您提供简单高效的故障排查、问题诊断、性能监控机制。

3.3 华为毕昇JDK

华为毕昇JDK 是华为公司基于OpenJDK的构建,免费。毕昇 JDK 是华为基于 OpenJDK 优化后的开源版本,是一款高性能、可用于生产环境的 OpenJDK 发行版。毕昇 JDK 稳定运行在华为内部 500 多个产品上,毕昇 JDK 团队积累了丰富的开发经验,解决了许多实际业务中由原生 OpenJDK 缺陷引起的问题。

毕昇 JDK 致力于为 Java 开发者提供一款稳定可靠、高性能、易调测的 JDK,也为用户在鲲鹏 AArch64 架构上提供一个更好的选择。

快速序列化——提升原生序列化性能

在一些无法使用 Kyro(无法修改代码时),需要使用 OpenJDK 原生序列化特性的场景,OpenJDK 原生的序列化机制会耗时较长,导致性能较低。毕昇 JDK8&11 通过实行快速序列化特性提升其性能

AppCDS——提升 java 应用启动速度

在 Java 程序运行初始阶段,类的加载是一个比较耗时的过程,且在每次程序运行中均需要执行一遍。而 CDS(Class Data Sharing)技术,就是把类加载后的数据保存到文件中,下次运行时,直接将加载后的类数据从文件中恢复到内存中,不需要再重新执行类的加载过程,从而提高性能。

G1GC 堆内存伸缩——及时释放空闲堆内存

在 OpenJDK 社区的 8u 版本中,即使 G1GC 在空闲堆内存没有被使用时,也不会主动及时归还给 OS,会造成内存资源占用浪费情况。由于 G1 尽可能避免触发 Full GC,因此在许多情况下,除非强制从外部执行 Full GC,否则 G1 不会将空闲的 Java 堆内存释放给操作系统。毕昇 JDK8 通过在 G1 中引入堆内存伸缩特性,在应用程序 CPU 占比不高情况下,定期尝试释放 G1 的空闲堆内存空间给 OS,达到内存资源的最优使用。

KAE Provider——支持鲲鹏硬加速/提升加解密速度

KAE 加解密是鲲鹏加速引擎的加解密模块,鲲鹏硬加速模块实现了 RSA/ SM3/ SM4/ DH/ MD5/ AES等算法,提供了高性能对称加解密、非对称加解密算法能力,兼容 openssl1.1.1a 及其之后版本,支持同步和异步机制。毕昇 JDK 8 通过利用 Provider 机制,实现对鲲鹏服务器 KAE 加解密特性的支持,以帮助用户提升在鲲鹏 AArch64 服务器加解密业务的竞争力

相关文章
|
4月前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
92 2
|
2月前
|
安全 Java 编译器
JDK 10中的局部变量类型推断:Java编程的简化与革新
JDK 10引入的局部变量类型推断通过`var`关键字简化了代码编写,提高了可读性。编译器根据初始化表达式自动推断变量类型,减少了冗长的类型声明。虽然带来了诸多优点,但也有一些限制,如只能用于局部变量声明,并需立即初始化。这一特性使Java更接近动态类型语言,增强了灵活性和易用性。
118 53
|
2月前
|
Oracle 安全 Java
深入理解Java生态:JDK与JVM的区分与协作
Java作为一种广泛使用的编程语言,其生态中有两个核心组件:JDK(Java Development Kit)和JVM(Java Virtual Machine)。本文将深入探讨这两个组件的区别、联系以及它们在Java开发和运行中的作用。
98 1
|
2月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
86 1
|
3月前
|
缓存 Java Maven
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
如何解决Java项目中因JDK版本不匹配导致的编译错误,包括修改`pom.xml`文件、调整项目结构、设置Maven和JDK版本,以及清理缓存和重启IDEA。
68 1
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
|
3月前
|
Java Spring 数据库连接
[Java]代理模式
本文介绍了代理模式及其分类,包括静态代理和动态代理。静态代理分为面向接口和面向继承两种形式,分别通过手动创建代理类实现;动态代理则利用反射技术,在运行时动态创建代理对象,分为JDK动态代理和Cglib动态代理。文中通过具体代码示例详细讲解了各种代理模式的实现方式和应用场景。
46 0
[Java]代理模式
|
3月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
32 1
|
3月前
|
Java
Java基础之 JDK8 HashMap 源码分析(中间写出与JDK7的区别)
这篇文章详细分析了Java中HashMap的源码,包括JDK8与JDK7的区别、构造函数、put和get方法的实现,以及位运算法的应用,并讨论了JDK8中的优化,如链表转红黑树的阈值和扩容机制。
44 1
|
4月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
4月前
|
存储 Java 开发者
【Java新纪元启航】JDK 22:解锁未命名变量与模式,让代码更简洁,思维更自由!
【9月更文挑战第7天】JDK 22带来的未命名变量与模式匹配的结合,是Java编程语言发展历程中的一个重要里程碑。它不仅简化了代码,提高了开发效率,更重要的是,它激发了我们对Java编程的新思考,让我们有机会以更加自由、更加创造性的方式解决问题。随着Java生态系统的不断演进,我们有理由相信,未来的Java将更加灵活、更加强大,为开发者们提供更加广阔的舞台。让我们携手并进,共同迎接Java新纪元的到来!
83 11