2025 年 Java 将走向何方?_java未来

在回顾了 2022 年和 2023 年的 Java 发展情况后,是时候看看 2024 年的状况以及 2025 年的发展前景了。最近 Azul 公司发布的 “Java 状况” 调查为我们提供了更多动力和见解,所以让我们详细了解一下如今的 Java 发展格局。

2023 年底,在《程序员 2023 年 Java 回顾》一文中,我回答了一个紧迫的问题:“有 C#、Go、Rust 和 Python 这些语言,为什么还要选择 Java?” 这是因为 Java 一直深受企业喜爱:

企业过去和现在都在使用 Java。看看《财富》500 强企业对它的依赖就知道了。没错,大型企业都很青睐 Java,原因有很多。企业最看重的是向后兼容性,它们对激进的更新和升级出了名地敏感。20 年前用 Java 5 编写的系统,应该能够在 Java 8 版本下编译和运行,稳定性才是关键。

在 2025 年初,情况依旧如此吗?

为了找到答案,让我们结合个人观点和专业知识,来看看 Azul 调查在五个方面的结果。

  • Java 在企业中的持续影响力:99% 的企业在软件或基础设施中使用 Java。
  • 甲骨文 Java 迁移情况:82% 的企业对甲骨文 Java 的定价表示担忧;85% 的企业为 Java 商业支持付费;49% 的企业使用 Java 17 或 Java 21。
  • Java 在云计算中的作用:71% 的企业使用高性能 JDK;24% 的企业仍受 Log4j 漏洞影响;33% 的企业表示有超过 20% 的云计算计算能力未被使用。
  • Java 与 DevOps:62% 的企业认为死代码或未使用的代码影响 DevOps 的工作效率;33% 的企业表示安全误报浪费了 DevOps 团队超过 50% 的时间。
  • Java 与人工智能:50% 的企业用 Java 构建人工智能功能;72% 的企业为支持人工智能必须增加计算资源消耗;49% 的企业表示人工智能相关工作负载占其云计算账单的一半以上。

Java 在企业中的持续影响力

尽管技术取得了巨大进步,但企业至今仍惧怕什么?他们惧怕 Java 升级。如前所述,稳定性至关重要,能够继续使用已经运行了二十年甚至更久的系统是很重要的。

根据调查,进入 2025 年,情况依旧如此:

大多数使用特定 JDK 版本编译的应用程序,在新版本 JDK 上无需修改代码或重新编译就能继续运行。

即便如此,许多企业最终还是完成了升级:

Java 21 成为受访者中第二受欢迎的版本,仅次于 Java 17,这凸显了 Java 生态系统中较新的长期支持(LTS)版本的广泛采用和吸引力。

另一个相关发现也体现在其他软件上,比如甲骨文数据库管理系统(DBMS)。尽管面临开源数据库 Postgres 的激烈竞争,并且在开发者中也不是最受欢迎的,但企业选择它是因为其背后的技术支持和咨询服务。Java 也是如此。调查发现,几乎所有基于 Java 的公司都会为技术支持付费。这是因为付费支持能提供:

关键服务,如补丁、错误修复、针对已知漏洞的更新,以及专家协助以降低风险。

对于仍在使用旧版本 Java 的企业来说,这些服务至关重要。Azul 的商业支持更进了一步,它是唯一为 Java 6 和 Java 7 等旧版本提供安全更新和错误修复的发行版。

不用甲骨文的 Java

归根结底,企业面临的选择是使用甲骨文 JDK,还是选择 OpenJDK 并从像 Azul 这样的供应商那里获得支持。两者都需要成本,所以你必须权衡利弊。报告的关键部分 “甲骨文 Java 迁移” 对这个问题进行了更深入的探讨:

对甲骨文 Java 定价的担忧,仍然是企业面临的一个持续存在且日益严峻的挑战。2023 年,72% 的甲骨文 Java 用户就已考虑切换到其他 OpenJDK 供应商,到 2024 年,这一比例飙升至 88%。

此外,受访者对甲骨文表示出极大的不满,列举了一系列原因,比如成本过高、销售策略问题,以及持续变化的定价和许可政策带来的不确定性。我还得补充一点,甲骨文随意且具有侵入性的审计也给企业带来了压力。

受访者也对开源解决方案表现出强烈的偏好,他们看重社区驱动的创新和灵活性。最终,大多数企业希望转向 OpenJDK,并选择提供付费支持的供应商或发行商。

Java 在云计算中的作用

但是,这些企业用 Java 做什么呢?如今,大多数工作负载都在云端运行。虽然从最简单的层面来说,云原生可能仅仅意味着容器化应用程序和 Kubernetes,但云原生还意味着微服务,以及考虑到虚拟机启动和预热时间后的亚毫秒级响应时间。

事实上,近三分之二在云端使用 Java 的企业表示,他们超过 50% 的云计算成本都源于 Java。在不影响性能的前提下,优化云端的 Java 使用,为降低成本提供了巨大的机会。

在使用高性能 JDK 的企业中,他们给出的前两大理由是提高应用程序性能和优化云计算成本。Azul 调查的大多数受访者都在采取积极措施,防止在云服务上过度支出,通过实施自己的管理措施来更有效地管理费用。

在提高应用程序性能方面,人们做出了很多尝试,尤其是减少 JVM 的启动时间,因为 JVM 启动时间长是出了名的。主要原因是加载、链接和初始化类需要花费大量时间。当然,这里说的是微秒级别的时间,但在云端启动虚拟机和运行微服务时,这点延迟可能会产生影响。目前已经有一些加速的方法,这里暂不考虑 GraalVM 和 Spring Native,这些方法包括:

  • OpenJDK Leyden,它进行了 JVM 运行时优化和静态编译。
  • 谷歌与阿里巴巴合作启动了 Eclipse Adoptium 快速启动孵化器项目。正如《谷歌加入 Adoptium—— 这是怎么回事?》一文中所探讨的,该项目旨在通过探索类预初始化等技术让 Java 运行得更快。
  • 在《Azul Zulu OpenJDK 17 Build Now Comes With CRaC》一文中介绍的 CRaC 项目。CRaC 代表检查点协调恢复(Coordinated Restore at Checkpoint),它是一个 API,用于在检查点 / 恢复机制下协调 JDK 和应用程序的资源。例如,它能让应用程序关闭打开的文件、转储缓存,并对所需状态进行快照,以便在恢复时能够正常运行。因此,该项目的主要目标是提供一个与机制无关的标准 API,用于通知 Java 程序检查点和恢复事件。

这是 JDK 中内置的解决方案,但 Azul 还在平台层面提供了一种名为 ReadyNow 的替代方案。

DevOps 与供应链安全

下一个关键部分聚焦于 Java 在 DevOps 领域的情况。调查发现:

死代码或未使用的代码是一个重大挑战,62% 的调查参与者表示这阻碍了他们 DevOps 团队的效率,同时安全问题也影响了 DevOps 的工作效率。

误报、识别真正的漏洞、Java 生态系统中的关键生产安全问题、监控和修补漏洞等工作,消耗了团队的时间,导致他们无法专注于重要的事情,即快速交付周期。

然而,该调查并未涵盖另一个对 DevOps 团队不利的因素 —— 软件供应链安全,这是应用安全领域最热门的话题。在当年 12 月的《程序员 2023 年 Java 回顾》中,我们介绍了软件物料清单(SBOMs),以及 Eclipse 基金会托管的开源项目 Jbom,它可以为本地和远程 Java 应用程序生成运行时和静态软件物料清单,还有 Sigstore Java。从那以后,除了 2024 年 5 月 GitHub 与 Gradle 合作加强供应链安全外,Java 相关进展较少:

将 Gradle 构建与 GitHub 的 Actions 集成,有助于在 Gradle 用户中推广最佳安全实践。为此,推出了一个新的官方开源 GitHub Action,借助 Dependabot 为 Gradle 项目生成完整准确的依赖信息。

除了针对 Java 的举措外,还有一些通用服务可以帮助跟踪漏洞,比如 OpenSSF 的 Siren。Siren 是 OpenSSF 新推出的邮件列表,旨在监控开源项目漏洞的威胁态势,为订阅者提供实时警报。

另一个是开源漏洞数据库(Open-Source Vulnerabilities,OSV),这是谷歌的一个项目,超越了当前通用漏洞披露(CVE)的跟踪水平。最近,谷歌还推出了 Vanir,这是一款新的安全补丁验证工具,目前仅适用于安卓系统。相关文章的链接可以在本文底部的 “相关文章” 部分找到。

紧跟机器学习和人工智能的步伐

最后来看看 Java 与人工智能。在这个领域,“竞争对手” 自然是 Python。然而,这项调查强调,对于以 Java 为主的开发者和企业来说,Java 仍然是首选。事实上,50% 的组织使用 Java 编写人工智能功能代码,这一比例超过了 Python 和 JavaScript。

有了诸如 JavaML(调查发现它最受欢迎)、SpringAI(借助它可以在 Java 代码中集成 OpenAI 和 Azure OpenAI 服务,从 Spring 代码中利用大语言模型的能力)、微软的 Semantic Kernel(一个开源轻量级框架,可轻松将传统编程语言与人工智能 “提示词” 结合),以及最近的 Spring AI MCP 等库,Java 怎么会不受青睐呢?

话虽如此,对于 Java 缺少而 Python 独有的功能,现在借助 GraalVM,你可以从 Java 代码中调用。GraalVM 能够运行除 Java 之外的不同语言的程序,并支持它们之间的直接互操作。因此,你可以编写混合语言程序,比如在 Java 中调用 JavaScript,或在 Python 中调用 Ruby 等,这些就是所谓的 “Truffle” 语言。

结论是,Java 不仅在企业应用领域稳固了其主导地位,还通过许多新进展进一步巩固了这一地位。

JVM 的贡献

当然,把所有功劳都归于这门语言有点不公平。另一个成功的关键因素是备受推崇的 JVM,正如我们在 Truffle 中看到的,它似乎正在成为所有语言的融合之地,这是有充分理由的。

最近,我采访了弗拉维奥?格洛克(Flavio Glock)和他的 PerlOnJava 项目(一个旨在在 JVM 上运行的 Perl 编程语言实现),我问道:

在当今云驱动的时代,与 JVM 这样的现代后端集成,是否是 Perl 保持活力并继续蓬勃发展的先决条件?

弗拉维奥的回答很有启发性:

在这个云驱动的时代,与 JVM 这样的现代后端集成,对 Perl 的持续发展至关重要。像 PerlOnJava 这样的项目展示了 Perl 在新环境中的适应能力和蓬勃发展的潜力。通过利用 JVM,Perl 可以访问广泛的库生态系统,利用现代性能优化技术,并且更容易集成到企业级解决方案中,如云服务和容器化环境。

所以,Java 生态系统的影响力远远超出了这门语言本身……

相关文章

Java 10:集合能力大升级,开发效率狂飙!

嘿,Java开发者们!是不是觉得每次Java版本更新都像是拆盲盒,不知道里面藏着什么惊喜?今天咱们就来聊聊Java 10,这个在2018年3月21日发布的版本,虽然新特性不多,但每一个都超有用,尤其是...

从 Java 8 升级到 Java 17 全过程,贼特么坑

最近在做 Java8 到 Java17 的迁移工作,前期做了一些准备,但是在升级过程还是有些问题,太emo了,一些信息记录如下,分为几个部分:编译相关参数迁移相关运行相关前人栽树后人乘凉,有需要升级的...

JDK8升级JDK11最全实践干货来了_jdk从6升级到8会有什么问题

1、前言截至目前(2023年),Java8发布至今已有9年,2018年9月25日,Oracle发布了Java11,这是Java8之后的首个LTS版本。那么从JDK8到JDK11,到底带来了哪些特性呢?...

JDK11升级JDK17最全实践干货来了_jdk1.8升级jdk11

1、前言如果你仍在使用JDK8,那你是否曾经遇到过OutOfMemoryError的问题?你是否曾经为JVM的调优问题感到困扰?本篇文章将为你介绍一种能够提供百倍性能提升的垃圾回收器,也许能够解决你的...

Java8 升级 Java 17:概述_java如何升级

自从Oracle收购了Sun Microsystem,刚好Sun microsystem又是Java的开山鼻祖,所以现在Java就被Oracle收到手里啦。不久的几年前,Oracle宣称对java商用...