阿里开源 OpenJDK 发行版 Dragonwell

新开源油墨 2019-12-14

日有消息显示,阿里将于 21 日重磅发布其 OpenJDK 发行版 Alibaba Dragonwell。

阿里开源 OpenJDK 发行版 Dragonwell

我们知道 OpenJDK 是基于 GPL v2/Classpath Exception 的 JDK 开源版本,有许多公司都在 OpenJDK 的基础上提供了自己的发行版,比如 Oracle、AdoptOpenJDK、Azul、IBM 与 Red Hat,一般这些供应商会将自行衍生的 OpenJDK 版本加入一些商业/非商业支持选项。

去年 AWS 也推出了自己的 OpenJDK 发行版 Corretto,背后甚至有 Java 之父 James Gosling “站台”,一时间引起不小反响。

常规理解,AWS 搞 Corretto 也算是一种“造轮子”,但是它提供的长期支持包括安全修复、常用功能增强、GC 调度、防止内存溢出,以及改进的监控、报表和线程管理等,这样的能力再加上 AWS 强大的客户和社区生态依赖,有理由让人相信 Corretto 这轮子是具有较大实际意义的。

阿里此次将发布的 Alibaba Dragonwell 也声称 LTS,并且阿里的客户与开发社区体量自然也无庸赘述,那么同为“造轮子”,Alibaba Dragonwell 这个 OpenJDK 发行版会带来些什么呢?

阿里云智能资深技术专家李三红向开源中国提前透露了 Alibaba Dragonwell 的一些信息。

第一印象是 Dragonwell 这个名字,龙井茶?是寓意像龙井一样的品质吗?分享一下背后的想法吧。

Java 本身就是一种咖啡的名字,AWS 开源的 Corretto 也是一种咖啡名。

在取名字的时候,我们也考虑了很多。中国的 Java 开发者将是 Alibaba Dragonwell 重要的用户群体,所以我们想从一些有中国特色的饮品名中寻找灵感,既能代表中国的文化,同时也希望这个名字中能有非常宏大的意愿,能够诠释她包容一切。最终想到了杭州的绿茶——龙井。

另一方面,龙井的英文名字 Dragonwell 也正好符合我们想要表达的意思。其中的“well”这个单词,就有着将很多水源汇聚在一起,一同享用的寓意,正好贴合开源协作分享的精神理念。这也是阿里开源 JDK 的初衷,希望将许多开发者的贡献汇聚在一起,让大家能够一起免费使用 Java,一起推动 Java 的进步。

为什么要去做这个东西?请介绍一下相关背景。

大家都知道 Java 一直是由 Oracle 主导的,从 2017 年开始,Oracle 开始陆陆续续转变了一些 Java 的策略。在 2018 年 CodeOne(原 JavaOne)大会上,来自 Java Platform Group 的首席架构师 Mark Reinhold 作了“The Future of Java is Today”的主题演讲,重点阐述了 Java 发布模式的变化。

他指出,从 Java 11(包含)以及以后的版本开始,Oracle 将不再提供免费的长期支持,如果你需要长期支持,可以通过向 Oracle 付费的方式获得。而 Java 8 的免费更新也将会在 2019 年一月份停止(目前已经停止)。

所以除非你是 Oracle 或者其它提供商业 JDK 厂商的付费客户,否则唯一的选择就是社区维护的 OpenJDK 版本,可以预见 Java 开发者从 Oracle JDK 切换到开源 OpenJDK 的现象会越来越多。

阿里可以说是全球最大的 Java 用户之一,而 JDK 又是 Java 的一个基础设施。我们其实早从 2010 年开始,就已经基于 OpenJDK 开源软件进行开发与定制。9 年来,支撑了阿里经济体内所有的 Java 业务,历经多年的“双11”考验,积累了大量业务场景下的实践经验。

阿里作为一家这么大体量的 Java 用户,我们有一份责任,就是把我们的 JDK 开放出去,给所有 Java 用户一个新的选择。同时,对于阿里自身来说,Alibaba Dragonwell 会针对 LTS 的两个版本 Java 8 和 Java 11 随阿里云 VM 镜像发布,免费提供给阿里云客户使用。

也就是说 Alibaba Dragonwell 会基于 OpenJDK 8 和 11?那么以后会更注重 Java 新特性的跟进还是保证提供支持呢?对它今后的发展有什么设想或者目标?

此次发布的 Alibaba Dragonwell 8 预览版本对应于上游的 OpenJDK 8 的版本。Alibaba Dragonwell 作为 OpenJDK 下游,是一款免费的 JDK 发行版,它将提供长期支持,包括关键修复和安全更新。

Alibaba Dragonwell 支持 x86-64/Linux 平台,它的特点,或者说所注重的是:在数据中心 Java 应用大规模部署的情况下,稳定性、效率以及性能的优化与提高。

Alibaba Dragonwell 的前身是阿里巴巴内部使用的 AJDK,或者换个角度来看,Alibaba Dragonwell 是 AJDK 优势的继承者。作为 AJDK 的开源版本,Alibaba Dragonwell 将沿袭 AJDK 的技术优势以及实践场景累积下来的技术经验。

AJDK 有众多的技术创新,包括多租户、Wisp 协程技术与 ZenGC 等,我们希望逐步把阿里巴巴内部积累的技术创新开源出来贡献给 OpenJDK 社区,并在 Alibaba Dragonwell 中沉淀下来。

什么时候 GA,目前有没有各个阶段具体的发布时间表?

目前发布的版本是 Alibaba Dragonwell 8 Preview 预览版,Alibaba Dragonwell 将每季度发布一个更新,目前计划是 Preview 的三个月后发布 GA。Alibaba Dragonwell 11 预计年底发布。

Alibaba Dragonwell 8 是一个 LTS 版本,它的生命周期具体是怎样的?最近大家对开源协议相关的问题都怕了(也就是开源协议其实可以根据厂商需要作变更),那目前/将来 Dragonwell 会不会加入一些支持限制条款呢?

不会。Alibaba Dragonwell 是 OpenJDK 下游,我们会严格遵循 OpenJDK 社区相关原则及协议。

前阵子 AWS 也推出了自己的 OpenJDK 发行版 Corretto;再往前,其实 Azul 与 Red Hat 等厂商也有提供 OpenJDK 版本。那么阿里的 Dragonwell 有什么优势、特点呢?

前面也提到了,Alibaba Dragonwell 注重的是在数据中心 Java 应用大规模部署的情况下,稳定性、效率以及性能的优化与提高。

具体来说:

  • 紧密与 OpenJDK 社区保持合作,保持对社区工作的跟踪,及时同步上游更新。

  • Alibaba Dragonwell 发行版与 Java SE 标准兼容。

  • AJDK 上孵化的创新技术,会逐步贡献 OpenJDK,并在 Alibaba Dragonwell 沉淀。比如这次发布的版本中包含了 JWarmUp 功能,它优化了 JVM 重启后的预热过程,具体技术细节可以参考用户手册。

  • 基于阿里工程实践,Alibaba Dragonwell 会选择移植高版本 Java 的重要功能,这些移植功能已经在阿里内部被大规模部署,用户都可以免费使用,而不用等下一个 LTS 版本。比如这次版本移植了上游 Java 11 的 Java Flight Recorder(JFR) 功能,Java 开发人员可以通过 JFR 收集 JVM 运行过程中的详细的 profiling 信息,配合 Java Mission Control(JMC),大幅提高 Java 应用的问题诊断及性能优化效率。这对于仍然停留在 Java 8 的用户来说,还是非常有意义的。

嘉宾介绍

李三红,阿里云智能资深技术专家。2014 年加入蚂蚁金服,现为阿里巴巴 Java 技术负责人,有超过 10 年的 Java 开发经验。加入阿里前,曾任 IBM Java 技术中心相关负责人,参与 IBM Java 虚拟机 J9 的开发。活跃于 Java 技术社区,在 Java 虚拟机领域拥有多项技术专利,是 GreenTea JUG(Java User Group)  组织者,JVM 顶级会议 JVMLS‘17 受邀演讲嘉宾,JavaOne、QCon、JPoint 等国际会议受邀嘉宾,VMIL‘18 会议程序委员会委员。

一、简介:

        3月21日北京阿里云峰会,阿里巴巴正式宣布对外开源OpenJDK长期支持版本Alibaba Dragonwell。作为Java全球管理组织Java Community Process(JCP)的最高执行委员会的唯一中国代表,以及Oracle之外的Java生态中为数不多的OpenJDK定制者,Alibaba Dragonwell的开源是阿里巴巴向全球Java开发者的重磅献礼。

    阿里巴巴有着最丰富的Java应用场景,覆盖电商、金融、物流等众多领域,是世界上最大的Java用户之一。作为OpenJDK的下游,Alibaba Dragonwell是阿里巴巴内部OpenJDK定制版AJDK的开源版本,AJDK为在线电商、金融、物流做了结合业务场景的优化,运行在超大规模的、100000+服务器的阿里巴巴数据中心。Alibaba Dragonwell与Java SE标准兼容,目前仅支持Linux/x86_64平台。Alibaba Dragonwell是OpenJDK的下游(friendly fork),使用了和OpenJDK一样的licensing。阿里会更紧密地和OpenJDK等开源社区协作,贡献更多的patches,促进Java技术的持续发展。

阿里开源 OpenJDK 发行版 Dragonwell

二、特性:

1、垃圾回收:使用CMS (-XX:+UseConcMarkSweep) 作为默认GC策略。

2、JFR(Java Flight Recorder):

(1)从JDK11中backport到了Dragonwell-8版本中。

(2)添加了EnbleJFR命令行选项,默认关闭,用于彻底隔离JFR相关逻辑,只有添加-XX:+EnableJFR到JVM命令行才可以使用JFR特性。

3、Serviceability支持:

(1)jmap的dump子命令支持“mini”选项,可以在做heapdump时忽略掉原始类型数组的内容,详情请参考jmap工具的帮助信息。

(2)增加参数PrintYoungGenHistoAfterParNewGC用于打印一次ParNew GC之后young区对象的histogram。该参数可以用jinfo动态打开。

(3)增加参数PrintGCRootsTraceTime用于打印一次ParNew GC的具体耗时,主要用于排查长的ygc问题。该参数可以用jinfo动态打开关闭。

(4)增加了参数ArrayAllocationWarningSize,默认值为512M。当分配的对象大小超过该值的时候,标准输出里会显示分配的堆栈。该参数可以通过jinfo动态修改。

4、JWarmUp:

(1)增加参数CompilationWarmUpRecording启用JWarmUp的记录模式,在指定的时间后,JVM会生成JWarmUp profile,包含JVM中的已加载类及热点方法。

(2)增加参数CompilationWarmUp启用JWarmUp的预热编译模式,根据指定的JWarmUp profile加载之前记录的热点方法,通过API可以通知JVM预热编译热点方法。

(3)JDK中提供com.alibaba.jwarmup.JWarmUp类,应用可以使用该JAVA API控制JWarmUp,例如通知JVM开始WarmUp编译,检查编译情况,通知JVM退优化预热编译的方法。

三、安装Alibaba Dragonwell:

1、下载软件包:

下载地址:https://github.com/alibaba/dragonwell8/releases

下载版本:Alibaba_Dragonwell8_Linux_x64_8.0-preview.tar.gz

2、解压软件包:# tar -xf Alibaba_Dragonwell8_Linux_x64_8.0-preview.tar.gz -C /usr/local

阿里开源 OpenJDK 发行版 Dragonwell

备注:解压后生成的目录名为j2sdk-image

3、配置环境变量:

# vim /etc/profile.d/jdk.sh

export JAVA_HOME=/usr/local/j2sdk-image

export PATH=$JAVA_HOME/bin:$PATH

# . /etc/profile.d/jdk.sh

4、查看JAVA版本:# java -version

阿里开源 OpenJDK 发行版 Dragonwell

相关推荐