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项目中的开源内容已经产生了丰富的选择
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的专利问题。
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 版本之后是收费的。
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.1 阿里巴巴Dragonwell JDK
Alibaba Dragonwell 是阿里巴巴公司基于OpenJDK的构建,免费。阿里巴巴Dragonwell没有通过TCK测试
Alibaba Dragonwell 会针对 Long Term Support(LTS) 提供 Java 8 、Java 11 和Java17版本
Dragonwell随阿里云 VM 镜像发布,免费提供给阿里云客户使用;
生产和安全
阿里巴巴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)
低成本
腾讯 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 服务器加解密业务的竞争力。