# 01-Java开发生态2024年度总结报告
## 1 关键要点

- 尽管数据显示 Java 17 是最常用 JDK,但其用户占比并未超过半数。根据 [New Relic 2024 Java 生态系统状态报告](https://newrelic.com/resources/report/2024-state-of-the-java-ecosystem),Java 17、11 和 8 的用户比例分别为 35%、33% 和 29%
- New Relic 数据中所谓“快速采用”指 Java 21 的采用率仅为 1.4%。虽相较 Java 8 以来的所有 LTS,增长速度更快,但这比例仍较低
- Java 已超越了其“缓慢”和“过时”的传统形象,当前正显现出明显创新动力
- 2024 年初关于 AI 的“狂热探索期”现象有所平息,但 AI 仍然是热点话题。现在态度更冷静,认为 AI 并非“万能锤”,而是需根据具体问题合理应用
- 一个名为 Commonhaus Foundation 的新非营利组织致力于开源库和框架的可持续发展,为自主管理的开源项目提供继任规划和财政支持
- WebAssembly 在 Java 领域终于开始获得关注,逐渐赶上 Go 和 Rust 等语言的生态系统
本报告总结了 InfoQ Java 编辑团队对 Java 语言及其相关生态的观察,包括 Java 核心技术的进步、新版本的采纳情况,以及 [Spring Framework](https://spring.io/projects/spring-framework)、[Jakarta EE](https://jakarta.ee/)等框架的演进。
还可收听由 Karakun 高级开发者 [Ixchel Ruiz](https://www.linkedin.com/in/ixchelruiz/) 和 Decodable 软件工程师 [Gunnar Morling](https://www.linkedin.com/in/gunnar-morling/) 主持的[播客讨论](http://www.infoq.com/podcasts/insights-java-trends-report-2024),获取关于 2024 Java 趋势的更多见解。
本报告有两个主要目标:
- 帮助技术领导者做出中长期技术投资决策。
- 帮助个人开发者选择学习和技能发展的重点领域,合理分配宝贵的时间和资源。
这是第六份 Java 趋势报告。自 2006 年以来,我们已开始内部追踪 Java 和 JVM 的趋势,并对此进行了广泛新闻报道。
为帮助读者更好理解当前和未来技术趋势,采用了 Geoffrey Moore 在其[同名书籍](https://www.amazon.com/Crossing-Chasm-3rd-Disruptive-Mainstream/dp/0062292986)中提出的“跨越鸿沟”模型。试图识别出符合 Moore 所定义的“早期市场”的创新:*“这一市场主要由技术爱好者和愿景者组成,他们希望抢占先机以抓住机会或应对紧迫问题。”*
正如 [2023](https://www.infoq.com/articles/java-trends-report-2023/)、[2022](https://www.infoq.com/articles/java-jvm-trends-2022/)、[2021](https://www.infoq.com/articles/java-jvm-trends-2021/)、[2020](https://www.infoq.com/articles/java-jvm-trends-2020/)、和 [2019](https://www.infoq.com/articles/java-jvm-trends-2019/) 的 Java 趋势报告中所做的一样,为 2024 年提供了以下内部主题图:

以下是 2023 年的参考主题图:

- 计划于 2024 年 11 月正式发布的 *Jakarta EE 11* 进入 **创新者**类别,因为其 16 项规范目前正在积极开发,并已在今年通过了审查。自 2024 年 6 月发布 *Jakarta EE 11-M4* 版本以来,开发者已经可以尝试 [Jakarta Security 4.0](https://jakarta.ee/specifications/security/4.0/)、[Jakarta Validation 3.1](https://jakarta.ee/specifications/bean-validation/3.1/)、以及 [Jakarta Data 1.0](https://jakarta.ee/specifications/data/1.0/) 等新特性。
- 因此,2022 年 9 月发布的 *Jakarta EE 10*、2020 年 12 月发布的 *Jakarta EE 9* 和 2019 年 9 月发布的 *Jakarta EE 8* 分别移动至 **早期采用者**、**早期多数** 和 **晚期多数**类别。
- *GraalPy* 和 *GraalWasm* 进入 **创新者**类别。这两个项目在 [GraalVM for JDK 23](https://medium.com/graalvm/welcome-graalvm-for-jdk-23-203928491b2b) 发布后,已被视为稳定且适合生产使用。
- 随着更多框架(如 Spring、Jakarta EE 和 Helidon)以 Java 21 为基础,*Java 21* 转至 **早期采用者**类别,同时 *Java 17* 进入 **早期多数**类别。
- Helidon 和 Vert.x 框架在最新版本中实现了虚拟线程服务器,*虚拟线程框架(Helidon Nima 和 Vert.x)* 被转移至 **早期采用者**类别。
- 由于 Helidon 支持虚拟线程并发布了 [Helidon 4.0](https://medium.com/helidon/helidon-4-is-released-a06756e1562a),*Helidon* 移至 **早期多数**类别,而 Helidon 3.0 和 2.0 仍支持反应式服务器。
- 由于 Scala 3 开发进展缓慢,2021 年 5 月发布的 *Scala 3* 移至 **晚期多数**类别。
- Azul 和 BellSoft 实现了 CRaC 技术,*快速 JVM 启动(CRaC)* 转至 **早期采用者**类别,同时 *快速 JVM 启动(GraalVM)* 被转至 **早期多数**类别。
## 2 AI 与 Java
AI 在过去一年发生了重大变化,仍然是一个热门话题。越来越多的工具和集成正在帮助 Java 开发者更高效地完成代码开发。
虽然 2024 年初的 AI 热潮有所缓解,但相关讨论依然热烈。开发者已从“必须切换到 Python”转变为“仍然可以用 Java 进行 AI 开发”。像 LangChain4j 这样的库大大提升了 Java 在 AI 开发中的可用性。
## 3 Commonhaus基金会
[Commonhaus基金会](https://www.commonhaus.org/),一个专注于开源库和框架可持续发展的新非营利组织,于 2024 年 Devnexus 大会上首次向 Java 社区亮相,旨在为自主管理的开源项目提供继任规划和财政支持。
其使命是:
> 通过共同管理和社区协作,赋能多元化的开发者、贡献者和用户群体,共同创建、维护和发展开源库和框架,确保其长期增长和稳定。
创始人 [Erin Schnabel](https://www.linkedin.com/in/erinschnabel/)、[Ken Finnigan](https://www.linkedin.com/in/kenfinnigan/) 和 [Cesar Saavedra](https://www.linkedin.com/in/saavedracesar/) 分别担任主席、秘书和财务主管。
Java 开源项目正经历动态变化。一些知名项目转向商业源代码许可(BLS),但与此同时,Commonhaus Foundation 则展示了更开放的新趋势。
很高兴像 Hibernate 和 JBang 等项目得到了基金会的支持,这将确保它们长期发展,为开发者提供更多信心。
Commonhaus 提供了云时代的开源模式,帮助解决关键项目的资金问题。
## 4 Spring Framework 6 和 Spring Boot
Spring 6 和 Spring Boot 3+ 的采用率显著提高。在我们公司中,几乎所有应用都已经迁移到了 Spring Boot 3+。Spring Boot 和 Quarkus 似乎正在成为云原生应用开发的首选框架。
Quarkus 的崛起势不可挡,其市场份额逐渐从 Spring Boot 手中夺过,并巩固了微服务框架中的第二名地位。
## 5 Java 17 及更高版本
过去一年中,Java 的改进更加关注现代应用需求,包括提升云环境中的性能和加强安全性。围绕启动时间改进的技术(如 Liberty 的 [InstantOn](https://openliberty.io/docs/latest/instanton.html)、[CRIU](https://criu.org/Main_Page) 和 [CRaC](https://openjdk.org/projects/crac/))尤其令人瞩目,使 Java 应用更加适合云端和无服务器计算。
虚拟线程的引入为 Java 并发编程带来了重要突破,尽管该技术仍在持续改进中,并且在某些场景下存在 [性能挑战](https://www.infoq.com/articles/java-virtual-threads-a-case-study/)。在安全性方面,支持最新 [FIPS 140-3](https://csrc.nist.gov/pubs/fips/140-3/final) 标准的加密模块的普及,使 Java 在受监管行业中的应用更加广泛。
随 Oracle JDK 17 的免费商业使用授权在今年 9 月结束,用户需迁移至 Oracle Java SE Universal 订阅以继续使用,这对用户成本产生了一定影响。许多用户因此转向基于 OpenJDK 的 Java 替代品,如 [IBM Semeru Runtimes](https://developer.ibm.com/articles/awb-where-do-you-get-your-java/),其最近已支持最新的 FIPS 140-3 标准。据 Azul 报告,[70%以上](https://www.azul.com/report/2023-state-of-java/) 的受访者正在考虑非 Oracle Java 替代品。观察这些授权变化如何影响开源 Java 的发展和创新将是非常有趣的。
Java 已经超越了“缓慢”和“过时”的刻板印象。Java 现在显现出明确的创新动力,同时保持了强大的向后兼容性和修复能力。之前对“破坏性变更”的恐惧已被一种平衡的创新方式取代,这种方式既推动进步,又不牺牲稳定性。此外,Java 正在增强与其他生态系统的兼容性,使其与不同语言和技术的交互更加轻松,从而提升了灵活性和吸引力。
Java 21 的快速采用令人瞩目,尽管多数公司仍在使用 Java 17。然而,与往年相比,现在有更多公司开始从旧版本的 JDK 迁移到新版本。
Java 17 正在成为新的基线,其流行度持续增长。过去,项目可能以 Java 8 为最低兼容版本;如今,这一角色正越来越多地被 Java 17 取代。虚拟线程、新模式和后续特性正在逐步推出(尽管目前仍是预览版)。
## 6 Jakarta EE
在 Jakarta EE 领域,有大量努力致力于 JDK 21 的采纳。因此,人们对 Jakarta EE 11 的期待非常高。
为即将发布的 Jakarta EE 11 所做的更新工作极其庞大,共涉及 16 项 Jakarta EE 规范。在此次升级中,移除了对已弃用 `SecurityManager` 类的引用,并引入了对 Java Records 的支持。
我期待以 [Garden State Java 用户组](https://gsjug.org/) 的代表身份参与 2024 年 7 月成立的 [Jakarta EE Future Directions](https://projects.eclipse.org/interest-groups/jakarta-ee-future-directions) 兴趣小组。该小组的目标是开展研究并制定优先建议,这些建议将及时提交给 Jakarta EE 和 MicroProfile 工作组,以抓住市场方向带来的机会。
## 7 Java 社区的声音
AI 在 Java 社区中主导了许多讨论。我们应该如何在 Java 中利用 AI?AI 能为我们编写多少代码?另外,关于 Project Leyden 的讨论也非常热烈,这是一个具有潜在重大性能提升的有趣架构。
关于 AI 的讨论仍然非常活跃,既涉及技术层面,也探讨了它对开发者的影响。目前,更多的讨论集中在如何使用这些新工具,而不是像年初那样担忧 AI 会取代开发者的工作。
Java 社区和技术行业一样,对 AI 的热情高涨。Java 正在不断适应并在 AI 领域发现新机遇。新的工具正在涌现,使得 AI 在 Java 应用中的集成更加方便。凭借多年的技术积累,Java 有能力迎接未来的挑战,并在多种场景中保持价值。
关于虚拟线程的讨论非常活跃,许多公司开始采用 JDK 21 并分享了各种用例。尽管反馈大多是正面的,但也存在一些问题,例如 Netflix 曾遇到过类似死锁的情况。
关于 OpenTelemetry 的讨论越来越多,它不断壮大,并巩固了自己作为 Java 领域领先可观测性技术的地位。
Java 社区中有许多令人兴奋的趋势,但我特别喜欢 [Gunnar Morling](https://www.linkedin.com/in/gunnar-morling/) 发起的 [十亿行挑战](https://www.morling.dev/blog/one-billion-row-challenge/)。这项挑战要求用 Java 编写程序,从全球气象站获取温度数据并计算每站点的最低、最高和平均温度。在 [164 个参赛作品](https://github.com/gunnarmorling/1brc#results) 中,由 [Thomas Wuerthinger](https://www.linkedin.com/in/thomaswue/) 团队完成的时间仅为 1.5 秒多一点,获得最快成绩。
## 8 新的令人兴奋的发展
LangChain4j 是一个令人激动的新工具,它意味着开发者不需要学习 Python 就能利用 AI,并大幅减少与不同 AI 提供商的专有 API 集成所需的工作量。
平台工程的崛起为 Java 开发者引入了新的工具,如 [Backstage](https://backstage.io/) 和 [Red Hat Developer Hub](https://developers.redhat.com/rhdh/overview),这些工具帮助简化应用交付并减轻开发者的认知负荷。某些项目进一步推出了针对特定运行时和框架的 SaaS 服务,期望通过减轻开发团队的压力来应对不断扩展的开发生命周期任务。
AI 的迅速崛起超出了预期。尽管年初时似乎没有什么比 AI 更重要的事情,但到下半年,这种热潮有所降温。
六个月的 Java 发布周期已成功稳固,这打破了对变化的恐惧,并激发了整个生态系统的创新浪潮。库和框架维护者借此模式更加积极地采用新特性和改进,同时在需要时保持稳定性。
JDK 21 和虚拟线程的采纳正在推动 Jakarta EE 社区加快拥抱 JDK 21 的步伐。
JSpecify 1.0.0 的发布及 Java 语言层级即将引入空指针标记是开发者的长期愿望。OpenTelemetry Profiling 达到实验阶段也令人关注。
JEP 465(字符串模板)的撤回令人意外,但其撤回背后的原因表明了团队对开发者需求的谨慎考量。
## 9 Java 社区
Java 社区正在通过更多合作不断壮大,例如 OpenTelemetry 标准的扩展及 MicroProfile 和 Jakarta EE 的共同项目。这种合作提升了开发效率,并推动了社区的发展。
## 10 结论
本报告应被视为 Java 生态系统方向讨论的起点,期待您的参与和反馈,共同塑造 Java 的未来。