本报告概述了 InfoQ Java 编辑团队目前是如何看待 Java 领域内的技术采用和新兴趋势的。
我们重点关注 Java,以及相关的语言(如 Kotlin 和 Scala)、Java 虚拟机(JVM)和基于 Java 的框架和工具。
我们讨论了核心 Java 的发展趋势,比如新版本 Java 的采用,以及Spring Framework、Jakarta EE、Quarkus、Micronaut、Helidon、MicroProfile和MicroStream等框架的发展。
本报告有两个主要目标:
协助技术负责人制定中长期技术决策。
帮助个人开发者将宝贵的时间和资源投入到可以学习和发展技能的地方。
这是我们发布的第四份 Java 趋势报告。自 2006 年以来,我们一直在内部跟踪 Java 和 JVM 的发展趋势,这个话题已经有大量的新闻报道。
为了更好地了解 InfoQ 和 QCon 报道的关于当前和未来的发展趋势,我们使用了Geoffrey Moore在同名著作中提出的“跨越鸿沟”技术思维模型。
我们试图找出 Moore 所说的早期市场,早期市场的“客户群是由技术爱好者和有远见的人组成的,他们希望在机会或迫在眉睫的问题出现之前抓住它们。”
与我们对2021年、2020年和2019年Java 趋势报告所做一样,下面是 2022 年发展趋势图。
作为回顾,下面是 2021 年发展趋势图:
除了在创新者阶段发现了一些新技术之外,一些显著的变化如下所述。
我们决定将所有 OpenJDK 的下游发行版放到一个标签中,即 Java Community JDK,并将它们放到早期大众阶段。这个清单包括:Amazon Corretto、Azul Zulu、OpenJDK的微软构建版本、BellSoft Liberica JDK、Eclipse Temurin、IBM Semeru和阿里巴巴龙井。
Java 17 已经进入了早期采用者阶段,因为一些框架,尤其是 Spring,已经将 Java 17 作为基线。
由于 MicroStream 与 Helidon、Micronaut 和 Spring Boot 的持续开发和集成,也加入到了 Helidon 和 Micronaut 的早期采用者阶段。
Spring Native 被移除,取而代之的是更通用的原生 Java。这是因为最初于 2020 年推出并休眠了两年的Leyden项目于 2022 年 5 月重新启动,VMware 决定用 GraalVM 取代Spring Native项目来支持生成原生镜像。
经过一年多的开发,Spring Framework 6.0 和 Spring Boot 3.0 都于 2022 年 11 月发布,采用了 Java 17+和 Jakarta EE 9 基线。这些版本还通过Micrometer内嵌了可观察性。
以下是 InfoQ 的几位 Java Queue 编辑与 Java Champion 对不同主题的讨论摘要。这些编辑和 Java Champion 包括:
Michael Redlich——埃克森美孚技术与工程公司高级研究技术员,InfoQ Java Queue 首席编辑;
Ben Evans——Red Hat 高级首席软件工程师,InfoQ Java Queue 编辑;
Johan Janssen——ASML 软件架构师,InfoQ Java Queue 编辑;
Dalia Abo Sheasha——微软产品经理;
Billy Korando——Oracle 开发者布道师;
Otávio Santana——Zup Innovation 杰出软件工程师。
我们也要感谢为更新 2022 年“跨越鸿沟”模型提供输入的其他 Java Queue 编辑:
Erik Costlow——产品高级总监,InfoQ Java Queue 编辑;
Karsten Silz——Java 全栈开发者,InfoQ Java Queue 编辑。
他们为我们在发展趋势图上推荐的一些技术定位提供了更多的背景信息。
OpenJDK
Korando:作为Amber项目的一部分,Record 类、模式匹配和对字符串的改进让我最为兴奋。我知道,在我的职业生涯中,这些特性在进行数据转换、处理格式化字符串和其他令人沮丧的任务时都非常有用。使用这些特性让我感到兴奋,未来的 Java 开发者也将受益于这些特性,不必像我一样经历这些挫折。
Santana:Java 8 已经过时了。在最近的一项市场调查(如 JRebel 的报告)中,我们可以看到 Java 8 的受欢迎程度正在下降。这种变化对于 Java 市场和开发者体验行业(如 IDE、框架、集成工具等)来说都是一件好事。我们还可以看到市场和 Java 社区为将 Java 11 作为最低版本要求付出了巨大的努力,比如 Quarkus 和 Jakarta EE 的最新版。我相信其他应用程序框架也会效仿,将 Java 11 作为最低版本要求。当我们谈及 Java 平台,我相信这些工具和框架占了企业代码的 80%左右,所以它们会不断更新,以免失去企业开发者的青睐。向 Java 11 的迁移也表明了一种更快节奏的文化,Java 和 JDK 版本将更频繁地更新,至少每两年更新一次。
Evans:随着 JDK 17 的发布,JDK 11 终于在市场上超越了 JDK 8。
Adoptium Marketplace的发布和可重复构建的到来比许多人意识到的要重要得多,对于那些必须关心供应链安全的企业和个人来说尤其如此。
Redlich:去年发布的Java 18和Java 19提供了新的预览和孵化器特性,如虚拟线程、结构化并发、switch 模式匹配、Record 模式以及外部函数和内存 API。这些特性以 JEP 的形式为Amber项目、Loom项目和Panama项目提供了持续的贡献。Java 20 计划于 2023 年 3 月发布,它将提供这些特性的升级预览和孵化器版本。
Java 17 及以上版本
Sheasha:自从最新的 Java 17 LTS 发布以来,我们注意到 Java 17 的采用速度比 Java 11 发布时要快。这是由各种各样的因素导致的,包括公司采用更现代的 DevOps 流程和管道,支持更快更容易的应用程序更新。另一个因素是框架和库采用了更快的发布节奏,而这在以前是开发者升级应用程序的一大障碍。最新的 Spring Framework 6 基于 Java 17,这向开发者传达了采用最新版本 Java 的决心。另一个拥抱更快 Java 发布节奏的团队是 Minecraft 团队,他们现在向数百万玩家发布的更新也是基于 Java 17 的。
与此同时,我们看到许多应用程序仍然在使用 Java 8。由于从 Java 8 升级到 Java 11 比从 Java 11 升级到 Java 17 更困难,因此,已经升级到 Java 11 的团队更有可能迅速采用 Java 17。
我们还看到越来越多的开发者使用非 LTS Java 版本(Java 18+),因为他们更有信心为自己的应用程序采用更新的 Java 版本,这样他们可以使用 Java 的新特性,而不必再等待数年。我们看到许多开发者在创建原型或开发新应用程序时选择了最新的非 LTS Java 版本。但对于生产环境来说,LTS 版本仍然是大多数团队的选择。
Santana:在最新的 LTS 版本中,Java 17 为 Java 开发者带来了几个新特性,其中 Record 模式带来了一个主要与企业业务相关的新视角。
Janssen:有许多令人兴奋的变化,例如 Spring Boot 要求使用 Java 17,这有望促进 Java 17 的采用。
Loom 项目与虚拟线程
Sheasha:在 Java 性能方面有很多令人兴奋的变化。许多开发者都很高兴看到 Loom 项目的更新,因为他们现在可以尝鲜一些新的特性,如虚拟线程。
Korando:将 Loom 项目的关键特性合并到主线 Java 发行版中可能是过去一年里最重要的变化。Loom 项目的开发在过去几年中一直备受关注,因为它承诺的更高的水平可伸缩性将被应用于许多 Java 开发者的应用程序中。虽然一些特性,如虚拟线程,现在已经准备好用于生产环境中,但毫无疑问,许多开发者都在热切地等待它们从预览状态移出,成为 LTS 的一部分,并有望在 2023 年 9 月与 Java 21 一起发布。
Evans:我听到很多人都在谈论 Loom 项目,但我对它持保留态度——我想等到我们有了更多的实际经验之后再说。我认为它可能会像一些人认为的那样改变游戏规则,但我不认为这是一件容易的事情。
Redlich:2022 年 9 月,备受期待的 Java 19 发布了对虚拟线程的支持。这方面已经有了孵化器框架,如Helidon Níma(Oracle 提供的微服务框架)和 Vert.x 提供的虚拟线程孵化器项目。我预计其他供应商也会效仿。
Jakarta EE
在延迟了大约三个月之后,备受期待的Jakarta EE 10于 2022 年 9 月 22 日向 Java 社区发布了。
Redlich:Jakarta EE 10 对 20 多个规范进行了更新,并增加了一个新的Core Profile,作为现有平台和Web Profile的补充。Jakarta EE 工作组已经在讨论 Jakarta EE 10 和 Jakarta EE 11 的小版本更新计划。
原生 Java(GraalVM/Spring Native/Leyden 项目)
Santana:GraalVM 越来越受欢迎,这为Leyden项目提供了巨大的空间。这是一场如何让 Java 启动更快的竞赛!
Janssen:GraalVM 正在不断改进并支持更多的用例,例如 Spring 应用程序。
Open Telemetry
Evans:OpenTelemetry已经发布了 1.0 版本,对于这样一个出现时间不长的标准来说,这算是取得了巨大的进步。我没想到 OpenTelemetry 会这么轻易超越已经很激进的预期。它将实现甘特提出的“到 2023 年底实现遥测大部分流量”的目标,这远远超出了计划。
Redlich:即将发布的 MicroProfile 6.0 将首次推出 MicroProfile Telemetry规范,用以取代 MicroProfile 1.3 中首次引入的 MicroProfile OpenTracing规范。
容器
Sheasha:随着越来越多的 Java 工作负载迁移到容器中,我们看到了一种转变——从只讨论如何容器化 Java 应用程序到如何最好地容器化 Java 应用程序。我们看到了更多关于如何在容器中运行应用程序的最佳实践。例如,微软发表了一篇关于内存分配和垃圾收集的文章。
Evans:Java 应用程序的容器化仍在继续演进当中。
微软对 Java 的支持
在 2021 年 4 月推出自己的 OpenJDK 下游发行版后,微软继续拥抱 Java 编程语言。
Sheasha:微软加入了Jakarta EE和MicroProfile工作组,因为微软继续在 Java 生态系统上进行大量投入,原因有很多,GitHub ReadME 项目的这篇文章对此做了说明。
来自 Java 社区的声音
Sheasha:随着创新速度的加快,现代化仍然是许多开发者面临的挑战。发布的 Java 版本越多,应用程序在 Java 版本和框架方面的差距就越大,而且越来越难以缩小。这就是为什么我们看到越来越多的公司在现代化工具上进行了投入。一些项目(如OpenRewrite)对我们来说很重要,因为它们可以让我们在不抛弃应用程序的同时保持创新。我们还看到了一些新的项目,例如用于 Java 的Eclipse迁移工具包,它可以帮助开发者进行 Java 版本迁移。
开发者疲于学习和掌握开发应用程序所需的大量知识,因为不断有新的库、框架和特性出现。此外,我们看到了“DevOps”中越来越多的“Ops”部分渗透到开发者的职责当中,所以开发者现在也需要了解 Docker 和 Kubernetes。
Korando:我认为,Loom 项目向主线 OpenJDK 交付特性的兴奋点开始转向了 Valhalla 项目。Valhalla 项目是 OpenJDK 的另一个长期项目,有望显著改善内存管理和吞吐量性能。希望我们能在 2023 年将 Valhalla 项目特性交付到 OpenJDK 主线!
Santana:无反射框架成为一个新趋势,通过消除反射来缩短应用程序启动时间和减少内存消耗。Quarkus、Micronaut、Spring Native 和 Jakarta CDI Lite 等框架就是这方面的例子。
云是所有解决方案的新目标。我们看到了向各种环境的迁移,不仅是基础设施即服务(IaaS),还包括任何能够提升 Java 开发者效率并为操作层提供更多抽象的解决方案。
从软件开发者的角度来看,无服务器带来了可伸缩性和简单性。为了利用这些优势,我们可以看到一些解决方案转向了原生。
Evans:今年,Quarkus 似乎已经开始关注开发者的意识。我经常会遇到尝试使用 Quarkus 的开发者,尽管实际的应用数量仍在增长当中。我想人们已经意识到它不仅仅是原生编译的 Java,它也是一流的 Kubernetes Java,具备很棒的开发体验。
有哪些令人兴奋的新东西我们还没有关注
Korando:在 JavaOne 2022 上宣布将 Graal JIT 编译器和原生镜像合并到 OpenJDK 中,这是出乎我们意料的一件事。GraalVM 的许多技术都很激动人心,但对于许多 Java 开发者来说它们很难使用。将这些关键特性合并到 OpenJDK 中可以让 Java 开发者更容易地使用它们!
Santana:我们知道,开发工具和架构是一个巨大的产业。因此,我们可以看到许多公司在谈论“完美解决方案”和非权衡决策。但实际上,Java 在其他方面被证明具有一致性,并且在一些场景中有一些成功案例。每一种架构决策都存在权衡,我们需要了解其上下文,以便将最佳解决方案应用到最佳的场景中。Java 生态系统向我们展示了它是一个生产就绪的平台,它为微服务、CQRS、云原生、无服务器、事件驱动设计、单体系统、SQL、NoSQL、映射器、活动记录等提供了解决方案。
Evans:我没想到 Loom 会在 Java 19 中作为试验特性被及时合并到主线,我真的很喜欢 Gunnar Morling 的 JFR Analytics 项目。
Janssen:我最近了解了 OpenJDK 的检查点协调恢复(Coordinated Restore at Checkpoint,CRaC),它通过运行时优化缩短启动时间。
Java 社区
Sheasha:就我个人而言,我很庆幸 Java 在我的整个职业生涯中为我打开了许多扇门。我曾有机会在 Java 生态系统中担任开发者、团队负责人、开发者布道师和程序经理。
Java 在语言方面的不断创新和改进让这个领域变得有趣,还使 Java 成为解决各种行业各种问题的绝佳选择。对我来说,我喜欢在 Java 领域工作的一个最大的理由是 Java 社区,社区里满是来自世界各地的充满热情的人才。
Evans:逐渐跟 Java 8 告别,并让社区转向 Java 17 及更高版本,这另人感到兴奋。此外,在可观测性方面,尤其是 OpenTelemetry,正变得越来越强大。此外,还有一些关于 Profile 的新工作(包括 Java Flight Recorder)正在启动。
Janssen:我真的很期待与 Loom 项目合作,希望我们很快就能够开始在项目中使用它。
Redlich:我很享受为开源项目做贡献的时光,最近还成为Jakarta NoSQL和Jakarta Data规范以及Eclipse JNoSQL项目(Jakarta NoSQL 的兼容实现)的提交者。我们一直致力于在 Jakarta EE 11 发布时将这两个 Jakarta 规范及时包含在 Jakarta EE 平台中。
结论
需要注意的是,我们的观点只涵盖了一部分东西。Java 生态系统的不同部分可能会有不同的体验。我们的这份 2022 年报告可以作为讨论的引子,而不是一个明确的声明。我们也希望人们能够就行业的发展方向展开公开的讨论。
原文链接:
https://www.infoq.com/articles/java-jvm-trends-2022/
相关阅读:
评论