Java技术发展历程与未来趋势:从JavaSE开源到JVM技术演进
从1995年第一个版本诞生到现在,Java已经走过了20多年。本文主要从JavaSE开源状况、OpenJDK版本生态、OpenJDK技术趋势三个方面介绍当前Java基础技术的发展情况。进一步探讨了支撑Java应用在云原生、AI、多语言生态等领域的基石——Java虚拟机(JVM)。技术,面向未来演进趋势。关于微服务框架以及基于这些技术构建的编程模型等Java前沿技术方向的实用分享,请关注QCon全球软件开发大会(北京站)2020。

背景
1991年,James Gosling带领团队启动了一个名为“Oak”的项目,这就是Java的前身。 1995年,Java 1.0发布。 Java的口号“Write Once, Run Anywhere”想必大家都很熟悉。 Java刚出现时主要面向互动电视领域。直到后来几年的发展,SUN(后来在2010年被Oracle收购)一度想用Java构建一个桌面网络操作系统来取代当时流行的Windows。然而,在Java随后的发展中,万万没想到,虽然它在桌面领域没有取得多大的成就,却在企业级应用领域出人意料地全面开花,占据了今天几乎占据统治地位。在东方失去的东西,在桑树上得到了。
JavaSE开源状态
Sun公司在2006年的Java One大会上宣布将Java技术开源,随后于2006年底在GPL许可下发布了HotSpot和javac,这是Java发展史上的一个里程碑事件。阿里巴巴于2012年首次签署OCA并参与OpenJDK的开发。
OpenJDK 是 JavaSE 开源参考实现。在 JavaOne 2017 的 Keynote 上(JavaOne 于 2018 年被 Oracle 更名为 CodeOne),Oracle 承诺开源 OracleJDK 中包含的所有商业实现功能[1]。
在 2018 年发布的 Java 11 中,Oracle 已经使 OpenJDK 和 Oracle JDK 的二进制文件在功能上尽可能接近,尽管 OpenJDK 和 OracleJDK 之间的某些选项仍然存在一些差异 [2]。
另外,除了OpenJDK主线外,近年来Java基础技术的开源趋势也愈演愈烈:2017年IBM开源了内部使用了20多年的J9虚拟机,并将其贡献给 Eclipse 基金会。然后在2018年和2016年,Oracle开源了GraalVM 1.0,其核心包括用Java编写的Just-in-Time编译器/Graal、SubstrateVM和支持多语言解释器的Truffle。框架。各公司开源的主要动机是通过开源构建更强大的语言生态系统并从中受益。
云+开源的结合,让普通开发者能够以更低的门槛获得一流工具(链)的使用和体验。任何企业都可以使用与任何大型组织相同的技术(民主化)。这是开发商的黄金时代。
Java 仍然免费:您应该选择哪个 JDK?
Java仍然是免费的,但随着OracleJDK License的变化并开始转向收费,OpenJDK将逐渐取代OracleJDK,成为市场主流。这一趋势从 JVM 2020 生态报告中也可以看出:与上一年相比,OracleJDK 已被 70% 的开发者选择。 2020 年将下降至 34%。
OracleJDK的收费客观上也加剧了OpenJDK生态的碎片化趋势,出现了包括阿里巴巴Dragonwell在内的多种基于OpenJDK的可选实现。
企业在选择使用哪个Java Vendor的JDK版本时,可以参考几个考虑因素:
下面我们分享一下阿里巴巴Dragonwell在这些方面的计划和想法。
阿里巴巴Dragonwell是阿里巴巴内部广泛使用的AJDK(AlibabaJDK)的开源版本。作为基石,Alibaba Dragonwell 支持阿里巴巴经济体中几乎所有 Java 业务,并通过了双 11 等重大促销的考验。Alibaba Dragonwell 主要针对优化和提高 Java 应用在大型应用的稳定性、效率和性能的场景。扩展数据中心中的 Java 应用程序部署。
2019年3月,阿里巴巴开源Alibaba Dragonwll 8.0.0。我们一直在履行开源承诺,AJDK内部使用的功能正在逐步开源。从刚刚发布的阿里巴巴Dragonwell 8.3.3开始,我们已经开源了JWarmup、ElasticHeap、多租户、JFR等诸多功能,协程Wisp 2.0、GCIH等也正在开源规划中。
同时,由于Alibaba Dragonwell是OpenJDK的下游,每个版本都会同步上游的最新更新,包括安全更新、问题修复等,并经过阿里巴巴内部大型应用集群的测试。
在新技术采用方面,阿里巴巴 Dragonwell 目前发布并维护了 Java 8 和 11 两个 LTS 版本。阿里巴巴 JVM 团队将根据实际业务情况将 Java11+ 的相关功能移植到 Java 8 和 11,以便阿里巴巴 Dragonwell 用户能够无需跟进Java 12、13等这些FR版本,提前享受这些功能带来的技术红利。
OpenJDK 技术趋势
纵观Java技术20多年的发展历程,始终围绕着两大主题:生产力和性能。在许多情况下,Java 的设计考虑的是生产力而不是性能。 Java引入的垃圾收集器将程序员从复杂的内存管理中解放出来,但另一方面,Java应用程序却一直被GC停顿时间的影响所困扰。 Java基于栈虚拟机的中间字节码设计,很好地抽象了不同平台(Intel、ARM等)之间的差异。同时,通过Just-in-Time(JIT)编译技术,解决了Java应用程序的峰值性能。但另一方面,JIT不可避免地引入了Warmup的成本。一般情况下,Java程序总是需要先加载类,解释并执行它们,然后执行高度优化的代码。
如果我们从 JVM 角度来总结目前 OpenJDK 社区的动态,主要从工具、GC、编译器、运行时四个方面来总结孵化相关技术:
江铃/江铃
Oracle开源了JFR,从Java 11开始就开始商业化功能。JFR是一个强大的Java应用程序问题诊断和性能分析工具。阿里巴巴也是主要贡献者,与包括 RedHat 在内的社区合作,将 JFR 移植到 OpenJDK 8。预计 2020 年 7 月发布的 OpenJDK 8u262(Java8)将默认具备 JFR 功能,以便 Java 8用户可以基于该版本,可以免费使用JFR功能。
ZGC/谢南多厄
无论是Oracle在Java 11中发布的ZGC,还是RedHat做了几年的shenandoah,他们都实现了并发复制GC来解决Large Heap情况下的GC关闭性能。 ZGC最新动态。在将于9月份发布的JDK 15中,ZGC将从实验功能变为生产可用性[3]。事实上,在AJDK 11上,阿里巴巴团队JVM团队已经做了很多ZGC从Java 11+到Java 11的移植工作,以及相关问题的修复。 2019年双11,阿里巴巴数据库团队共同努力,让数据库应用程序可以在ZGC上运行。 ,在100+GB Heap的情况下,GC停顿时间可以保持在Graal
采用Java开发的新一代Just-in-Time编译技术来替代目前HostSot JVM的C1/C2编译器。 OpenJDK上的Ahead-of-Time(AOT)技术也是基于Graal编译器开发的。
织布机
OpenJDK 社区协程项目对应于 AJDK 的 Wisp 2.0 实现。详细讨论请参考[5]。
Java 的攻击:面向未来的发展
2020年,站在一个全新的节点上,本文也从云原生、AI、多语言生态三大方面展望了未来的发展。有些讨论本身超出了 Java 本身。
云原生的语言演变
云原生时代,软件交付方式发生了根本性的变化。以Java为例。过去,Java开发者交付应用本身,具体以“jar”和“war”的形式交付,而云原生则使用Container作为交付单元:
在运行方面,云原生的应用需求是:
Java语言作为企业计算和互联网的王者,具有一致性、基于Java语言构建的丰富的生态系统、丰富的第三方库、多样化的可服务性支持等。随着云时代微服务和Serverless的应用,这些新的架构已经逐渐达到了Java程序速度提升的天花板——Java本身的启动和运行开销。
在云原生的新背景下,当我们谈论语言的演变时,它不仅仅局限于运行时和编译器级别。新的计算形式必然伴随着编程模型的变化,这涉及到编程语言周围的库、框架、工具等。一系列配套改革。从目前业界来看,也有很多项目正在进行:Quarkus、Micronaut、Helidon,这些与 GraalVM/SVM(Java 静态编译技术)配合的下一代编程框架。 Quarkus甚至提出了“容器优先”以及他们所倡导的轻量级uber-jar的理念,符合容器交付的趋势。红帽Java团队和OS团队联合开发的“Checkpoint Restore Fast Start-up”技术(AZul在JVM技术峰会’2019上也提出了类似的想法)就是为了解决Java在较低版本上快速启动的问题。级技术栈。问题。
在Java for Cloud Native方向,我们也开展了相关的研发工作。 Java是一门静态语言,但它包含了大量的动态特性,包括反射、类加载、字节码工具(BCI)等。这些动态特性本质上违反了GraalVM/SVM所要求的封闭世界假设(CWA)原则。这也是运行在JVM上的传统Java应用程序不容易在SVM上编译和运行的主要原因。阿里巴巴JVM团队静态定制了AJDK,为Java的静态和动态特性找到了明确的边界,从JDK层面提供了Java静态编译的可能性。同时,我们正在与Ant中级团队合作,定义静态编译的Java编程模型,并通过编程框架对其进行约束——Java应用程序的开发是静态编译友好的。我们基于Ant开源中间件SOFAStack静态编译了服务注册中心Meta节点应用。与传统运行在JVM上相比,性能提升了数量级:服务启动时间减少了17倍,可执行文件大小也减小了。 3.4x,运行时内存减半。详细信息请参见[6]。
AI崛起,编程语言异构计算新挑战
2005 年,时任英特尔首席技术官贾斯汀·拉特纳 (Justin Rattner) 表示:“我们正处于向多核、多线程架构过渡的风口浪尖。”在过去的十几年里,编程语言和编译器领域一直在朝着并行架构范式努力。进行优化探索。近年来随着AI的兴起,不同的时间节点、相似的场景对FPGA/GPU异构计算场景的编程语言和编译器领域提出了新的挑战。
除了传统编译器执行的自动并行化工作外,例如编译优化领域的 IBM 研究热点。
在并行语言层面,对于C&C++开发者来说,CUDA的出现降低了GPU编程的门槛。然而GPU和CPU两种硬件模型的本质区别导致了开发成本过高,并且需要学习和了解更多底层硬件细节。更不用说Java等高级语言开发语言所面临的底层硬件模型与高级语言之间的巨大差距。
在Java领域,早在2014年JVM技术峰会上,AMD就分享了他们的Sumatra项目,试图实现JVM与异构系统架构目标硬件的交互。最近,曼彻斯特大学发起的TornadoVM项目,实现包括:Just-in-Time编译、支持从Java字节码到OpenCL的映射、优化的运行时引擎以及维护Java堆和异构设备的内存管理器为了堆内存的一致性。 TornadoVM的目标是开发人员无需了解GPU编程语言或相关GPU架构知识即可编写异构并行程序。 TornadoVM可以透明地运行在AMD GPU、NVIDIA GPU、Intel集成GPU和多核CPU上。
在通用CPU领域,OpenJDK社区的Vector API项目(Panama的子项目)依靠CPU的SIMD指令实现了计算性能的指数级提升。 Vector API在大数据和AI计算方面也有广泛的应用场景。阿里巴巴JVM团队已将Vector API移植到AJDK 11,未来将开源给阿里巴巴Dragonwell。分享一下我们得到的基本性能数据:
时间越短(单位:毫秒),性能越好
多语言编程,链接多语言生态
多语言编程并不是一个新概念。在 Managed Runtime 领域,IBM 于 2017 年开源了 Open Managed Runtime(OMR),Oracle 于 2018 年开源了 Truffle/Graal 技术。OMR 和 Graal 技术允许开发者以显着更低的成本实现新语言。以前的 OMR 以 C 和 C++ 组件的形式提供垃圾收集 (GC)、即时 (JIT) 以及可靠性、可用性和可服务性(RAS、工具)。开发者可以通过“粘合”的方式依赖这些组件,基于这些组件实现自己的高性能语言。至于后者Truffle/Graal,Truffle是一个依赖AST解析器来实现新语言的Java框架。它本质上将您的新语言映射到 JVM 世界。与 Scala 和 JRuby 不同,这些语言是围绕 JVM 生态系统本身构建的。它们本质上是Java。无论是OMR还是Truffle/Graal,它们都提供生产级的GC、JIT、RAS服务支持。新开发的语言完全不需要重新实现这些底层技术。
从行业角度来看,针对特定领域的领域特定语言(DSL)语言有向这些技术迁移的趋势。高盛正在与 Graal 社区合作,将其 DSL 迁移到 Graal。此外,Ruby/OMR、Python/Graal、JS/Graal、WASM/Graal等真正链接不同语言生态的项目也在快速发展。
回到AJDK,AJDK 8中已经支持Graal,阿里巴巴内部业务已经上线了JS/Graal等成熟技术。
终于
Java是一项20多年前发明的技术。它历经重重磨难,几经易主,却历久不衰。本文旨在为Java开发者梳理Java技术现状,并探讨Java技术在云、AI等重要领域的演进趋势。在介绍的相关部分,我们还穿插了阿里巴巴的一些工程实践。作为全球最大的Java用户之一,我们一直在探索前沿Java技术的应用,并通过在阿里巴巴丰富的业务场景中的实验,真正将这些技术应用到真实的生产环境中。我们也非常乐意分享和贡献我们在Java领域的经验、实践和技术见解,共同推动Java的发展。
参考:
[1]
[2]
[3]
[4]
[5]
[6]
关于作者:
李三红,阿里巴巴/蚂蚁编程语言与编译团队负责人,首席 JVM 架构师。在加入阿里巴巴之前,他曾从事IBM Java虚拟机J9的开发,并拥有Java虚拟机领域的多项技术专利。活跃于Java技术社区,GreenTea JUG(Java User Group)组织者,JVM顶级会议JVMLS'17特邀演讲嘉宾,JavaOne、QCon、JPoint、Joker等国际会议特邀嘉宾,VMIL'成员18 会议程序委员会。
QCon 北京2020“Java生态与未来”专题,由李三红老师担任制作人,邀请了众多Java领域的专家。您可以了解:阿里巴巴团队如何以Native Code的速度启动Java程序,带来高达两个数量级的启动性能提升;腾讯JVM研发团队如何弥合OpenJDK版本差距; WAMR开源项目核心成员分享WASM如何服务从嵌入式、端端到云的不同场景需求;如何使用下一代云原生编程框架Quarkus进行应用程序开发,并使用Native模式部署在云平台上。点击了解更多。