这份报告总结了 InfoQ Java 编辑团队对目前 Java 领域技术采用和新兴趋势的看法。我们关注 Java 及相关的语言(如 Kotlin 和 Scala)、Java 虚拟机(JVM),以及基于 Java 的框架和工具。我们讨论了 Core Java 的趋势,比如新版本 Java 的采用,以及Spring Framework、Jakarta EE、Quarkus、Micronaut、Helidon、MicroProfile和MicroStream等框架的演进。
你也可以收听相关的播客,了解有关 2023 年 Java 趋势的内容。
这份报告有两个主要目标:
这是我们发布的第五份 Java 趋势报告。自 2006 年以来,我们一直在内部追踪 Java 和 JVM 的发展趋势,这个主题也有了大量的新闻报道。
为了帮助开发者通过 InfoQ 和 QCon 了解当前和未来的技术发展趋势,我们采用了由Geoffrey Moore在他的《跨越鸿沟》一书中提出的“跨越鸿沟”模型。我们试图识别符合 Moore 所谓的早期市场的想法,这个早期市场的“用户群体由技术爱好者和有远见的人组成,他们希望在机遇或潜在问题出现之前就提前行动”。
与我们在2022年、2021年、2020年和2019年发布的 Java 趋势报告一样,我们也提供了 2023 年的内部主题图:
作为比较,这是我们 2022 年的内部主题图:
除了在创新者类别中出现了几种新技术之外,其他值得注意的变化如下。
Java 17+ 被重新归类为 Java 17,仍处于早期采用者阶段,因为有更多的框架将 Java 17 作为基线。Java 21 已被列入 创新者 阶段。
我们创建了一个新的标签 Fast JVM Startup,进一步细分为 Fast JVM Startup (CRaC)( 创新者阶段)和 Fast JVM Startup (GraalVM)(早期采用者 阶段)。这是因为这些相对较新的技术近来已经被引入到 Java 社区中。
以下是 InfoQ Java Queue 编辑和 Java Champions 针对各种主题的讨论摘要。参与者包括:
We also acknowledge the Java Queue editors who provided input on updating our "crossing the chasm" model for 2023:
除此之外,我们还要感谢为我们的 2023 年“跨越鸿沟”模型提供意见的 Java Queue 编辑们:
我们相信这份摘要提供了更多的背景信息,解释了我们在内部主题图中对某些技术进行归类的原因。
Janssen:GraalVM 和 CRaC(Coordinated Restore at Checkpoint)在减少 Java 应用程序启动时间方面的改进令人印象深刻。GraalVM 的持续改进非常棒,而且与许多框架的集成使得在应用程序中使用原生镜像变得更容易。除了原生镜像支持外,GraalVM 还提供了一个 Java 运行时引擎,可以用来替换供应商的 JVM,用户可能只需通过更换运行时就可以为应用程序带来更好的性能。
Redlich:除了 JDK 20 和 JDK 21 的发布之外,我认为最重大的变化来自 Oracle Labs 和 GraalVM。在过去的一年中,我们看到了:GraalVM 的部分技术被贡献给了 OpenJDK;创建了 Project Galahad,该项目将专注于 Graal 即时(JIT)编译器的开发和集成,作为替代现有 HotSpot JIT 编译器的可能选项,并纳入到未来的 OpenJDK 发布中;GraalVM 的发布与 OpenJDK 的发布保持一致;取消 GraalVM Enterprise,采用了新的许可。
Ruiz:发布节奏以更易被接受的方式带来了新特性,不同的用户可以自行选择体验它们。总的来说,人们对进行早期测试和提供更丰富的反馈保持着良好的心态。
某种程度上,这也简化了 Java 生产版本的更新路线图。可预测性有助于更好地协调开发团队。
Yurenko:我看到对最新 Java 版本的采用速度在加快。我经常在技术大会上听到有人讨论这方面的内容,在我收到的问题中也有所体现,也反映在了 GraalVM 团队去年进行的 GraalVM 社区调查 中——63% 的用户已经在使用 Java 17 或更高版本。
Mehmandarov:今年发布了 Java 20 和 Java 21。其中一些关注度最高的特性是 Record Patterns 和 Pattern Matching for switch,它们终于结束了预览状态。对于处理大量数据和简化代码来说,这些可能是令人感到兴奋的特性。
Yurenko:我看到很多项目和库都在采用 GraalVM,特别是 Native Image。Spring Boot 现在支持 开箱即用的 Native Image,还有其他流行的 Java 框架,我看到 许多库 也已添加了对 Native Image 的支持。
在 JDK 21 中发布的 JEP 445(Unnamed Classes and Instance Main Methods (Preview)受 2022 年 9 月发表的博文 Paving the on-ramp 的启发,该文由 Oracle Java 语言架构师 Brian Goetz 撰写。这个特性将“让学生在不需要理解为大型程序设计的语言特性的情况下编写他们的第一个程序”。
JEP 463(Implicitly Declared Classes and Instance Main Methods (Second Preview))最近从 JEP Draft 8315398 进入到 Candidate 状态,我们预计它将在 JDK 22 中发布。这个 JEP 之前叫 Unnamed Classes and Instance Main Methods (Preview)、Flexible Main Methods and Anonymous Main Classes (Preview) 和 Implicit Classes and Enhanced Main Methods (Preview),根据对 JEP 445 的反馈做了增强。Oracle 技术顾问团队成员 Gavin Bierman 发布 了针对 Java 社区评审的 规范文档 初稿。
Yurenko:与此相关的另一个趋势是,Java 对于初学者来说变得更加易用。我认为对于社区来说,保持对初学者(无论是学生还是行业新人)的开放和欢迎态度非常重要。Records、Pattern Matching、Unnamed Classes 和 Instance Main Methods 等特性可以让初学者更快地学习 Java,更轻松地开发他们的第一个应用程序,并变得更加高效。
Ruiz:社区反应激烈,许多人在关注 Java 21 的发布。自首次预览以来,Project Loom 就一直吸引着许多开发者,特别是虚拟线程和结构化并发。
其他一些人在关注 JVM 的进展,这些进展并不只局限于 Java 语言本身的语法变化。
对于从 Java 8 到新版本的迁移计划,人们的态度是“现在或永远不”!
Yurenko:我最近看到了一种有趣的分析社区发展趋势的方法—— Vaadin 开发者关系副总裁 Marcus Hellberg 分析了 2023 年的 4 个主要 Java 大会上的演讲内容。你可以自行查看这篇文章,以下是我的一些结论:
我看到的另一个趋势是关于缩短 JVM 应用程序启动时间和提升性能的讨论,这说明我们正在做的事情是对的。
Mehmandarov:最近,人们围绕 虚拟线程 进行了许多讨论,这个特性终于在 Java 21 中结束了预览状态。我们还看到了更多的生成式 AI 的发展和应用(特别是用于代码生成)。它的成熟度仍然有待提升,但这是一个令人兴奋的开始。我们还看到了更多用于 AI 和 ML 的 Java SDK 或框架的演进,例如 Semantic Kernel、Deeplearning4J、djl 和 Tribuo。
Janssen: Java 生态系统仍在蓬勃发展,有许多新的发展和改进。除了已经提到的内容外,还有一些有趣的发展,主要集中在 AI 方面。我们看到了像 Spring AI 这样的项目出现,在所有基于 Python 的解决方案之外提供了另一种选择。除了这些大热门话题之外,还有许多其他有趣的项目,比如 Spring Modulith,它现在是一个官方的 Spring 项目,用于创建更好的单体应用而不是微服务。
Redlich: 我在 2023 年听到和看到的大部分热议都集中在 Project Loom 上。特别是 虚拟线程 最终成为 JDK 21 的一个特性。在这个备受瞩目的 2023 年 9 月版本发布之前,有许多关于虚拟线程的演示和 YouTube 视频。在 2023 年 9 月于纽约举行的特别 Java Community Process (JCP) 25 周年庆典 上,JCP 执行委员会成员组成的小组表示,他们最喜欢的 JDK 21 特性就是虚拟线程。
Ruiz: 鉴于人们对 LLM、ML 和 AI 的关注,看到一些为特定应用场景、工作流和产品而生的新项目、库和 Java API,我并不会感到惊讶。
Mehmandarov: 如果我不得不选择一个趋势,那就是生成式 AI,特别是它更加专注于代码生成。尽管生成的代码中存在逻辑错误、幻觉和其他问题,但它仍然可以被归入“意外、新颖和令人感到兴奋”的范畴。
Janssen: 看到了 Java 21 中有许多新特性,例如来自 Project Loom 的虚拟线程。我有点担心其中一些特性会被推迟到以后的 Java 版本中。由于 Java 21 是新的长期支持 (LTS) 版本,很高兴它们被包括在内,因为许多公司只使用 LTS 版本。乍一看似乎没有移除大的东西,我希望这能让项目的升级更加容易一些。现在通过 OpenRewrite 进行升级会更加容易,它不仅可以自动升级 Java,还可以升级第三方库, 如 JUnit。
Redlich: 正在开发的 MicroProfile JWT Bridge 规范是 Jakarta EE 和 MicroProfile Working Groups 的合作成果。这个新规范可以让开发者在 MicroProfile JWT Authentication 规范的基础上构建 Jakarta Security 应用程序,它提供了无缝的集成,可以避免重复的工作和循环依赖。这项工作的目标是将 MicroProfile JWT Authentication 的可选部分连同 TCK 移至新规范中,并为 MicroProfile 7.0 做好准备。
Ruiz:JVM 领域 CLI 工具的复苏。我们已经看到了一些成熟的项目,解决或减少了开发者在体验、测试、发布和发布工具、项目和产品时出现的问题。JBang 和 JReleaser 就是这一系列复苏工具的一部分。
Yurenko:我每天都会看到许多新项目的出现。例如,AI 和 ML 可能是目前最热门的趋势,对于 Java 开发者来说,这个领域有很多机会。我最喜欢的一个项目是 Tribuo,这是由我在 Oracle Labs 的同事开发的一个开源 ML 库。OpenJDK 项目 Valhalla 和 Panama 也将极大为面向 AI 开发的 Java 开发者提供便利。
Mehmandarov:这个领域有许多令人激动的事情,一些是新出现的,一些是即将到来的,比如 String Templates(仍处于预览状态)以及支持机器学习和 Java 的各种库,还有一些相对成熟但仍在不断改进和添加新特性的项目,比如针对 Java 的云原生栈(比如 Jakarta EE 和 MicroProfile)。
在处理大型数据集方面,我也看到了更多类似 Data-Oriented Programming in Java 的概念,以及更多关于更高内存使用效率的改进,比如 Project Lilliput 和 Valhalla 中的值对象。
此外,我很高兴能够与全球 Java 社区进行互动。这是一个真正充满活力和支持的团体,他们渴望学习并分享他们的知识。
Redlich:我准备了一个叫作“Jakarta EE 11:超越 Java EE 时代”的演讲,从 2023 年 11 月开始。自 2018 年以来,Jakarta EE 的发展令人惊叹,研究 Jakarta EE 规范一直是一件很棒的事情。
Janssen:我们每年都会得到两个新的 Java 版本,包含了许多特性和工具、库和框架的改进。除此之外,我很高兴看到能够再次举办 Java 或 JVM 技术大会并吸引更多的与会者。因此,请大家确保参加了这些大会,了解更多关于 Java 发展的信息,并与其他开发者一起参与讨论。
需要注意的是,我们的讨论参与者只告诉了我们故事的一部分,Java 生态系统的不同群体、部分和地区可能有不同的观点。我们发布的 2023 年趋势报告应该被视为讨论的起点,而不是确定性的陈述。当然,也可以作为一个关于行业发展方向的开放性讨论的邀请。
领取专属 10元无门槛券
私享最新 技术干货