写点什么

Spring 团队谈 AOT 缓存处理、空值安全性和支持政策

作者:Karsten Silz

  • 2025-06-03
    北京
  • 本文字数:2319 字

    阅读完需:约 8 分钟

大小:1.11M时长:06:28
Spring团队谈AOT缓存处理、空值安全性和支持政策

Broadcom 最近发布了 Spring Boot 3.5多个 Spring 项目,并正在开发 Spring Framework 7.0 和 Spring Boot 4.0,计划于 2025 年 11 月发布。


Java 中的空值安全性正日益受到广泛关注。JEP Draft 8303099(非空受限和可空类型 (预览))目前仍在推进中,尚未成为即将发布的 JDK 版本的候选特性。与此同时,由谷歌(主导)、Spring、JetBrains 等成员组织共同参与的 JSpecify 计划为 Java 静态分析提供了标准注解。

InfoQ 采访了 Broadcom 的 Spring Framework 核心提交者 Sébastien Deleuze 和 Spring 团队开源支持总监 Michael Minella。他们回答了与处理 Java AOT 缓存、寻找支持 JSpecify 的库以及近期 Spring 支持政策变化相关的问题。


InfoQ:用户通常将 Spring Boot 应用程序作为存储在注册表中的容器镜像进行部署。然而,为了使用 Project Leyden 的 JEP 483 更快地启动应用程序,用户还必须为每个容器镜像存储和分发至少一个预编译(AOT)缓存文件。在这方面有哪些最佳实践?


Sébastien Deleuze: Spring Boot 在这方面非常灵活,它提供了一个 extract 命令来解包可执行 JAR 文件,可以与 Class Data Sharing (CDS) 或 AOT 缓存一起使用。


AOT 缓存很快将支持 JEP 515(提前方法分析)和 JEP Draft(提前代码编译)。为了生成有效的 AOT 缓存,分析数据应从具有实际工作负载的实例中获取,这些实例可能来自生产环境。AOT 缓存不一定需要包含在容器镜像中,这种集成很可能会发生在平台级别。例如,我们正在将 AOT 缓存与 Spring AOT 集成到 Tanzu PlatformTanzu Spring 中,实现 Spring 应用程序的自动优化。


在容器镜像中分发缓存方面,Spring Boot 使用开源的 Buildpacks 来创建容器镜像。它们可以自动使用 CDS 执行训练,并将生成的缓存文件包含在容器镜像中。AOT 缓存也可以通过这种方式进行分发。值得注意的是,与 OpenJDK Project CRaC 不同,CDS 和 AOT 缓存不会转储原始 Java 进程内存,从而有效避免了泄露敏感信息或密码的风险。一个推荐的最佳实践是使用一个专门的顶层容器层来存储 AOT 缓存,确保从应用层及以下都能充分利用缓存的优势。


InfoQ:JSpecify 计划定义了 Java 中空值安全性的语义,并标准化了 @Nullable@NonNull 等注解。从 Spring Boot 4.0 开始,所有 Spring 组合项目最终将使用 JSpecify。但是 Spring 开发者如何知道哪些非 Spring 库使用了 JSpecify?


Deleuze: 目前还没有一个权威的渠道来列出所有使用了 JSpecify 的库。不过,这确实是一个很有意义的想法,我们会将这个建议反馈给相关的工作组。在 Spring 之外,我们已经看到谷歌、Gradle 和 GraphQL 在他们的库中添加了 JSpecify 注解。


关于 JSpecify 的采用,有三个关键点:


首先,JSpecify 定义了三种空值类型:可空(@Nullable 注解)、非空(@NonNull 注解)和未指定(Java 默认行为)。Java 的默认行为适用于那些未明确声明其 API 空值语义的库。当混合使用空值安全(null-safe)和空值不安全(null-unsafe)代码时效果很好,尤其是当空值安全的 API 使用空值不安全的库时。


其次,粒度可以比整个库更具体。通常在包级别使用 @NullMarked 注解来声明默认采用非空类型,然后使用 @Nullable 明确标记可空类型。库可以用这种方式逐步增加空值安全性,甚至可以细化到类或方法级别


最后,JSpecify 正在努力更全面地定义 JDK 本身的空值语义,因为目前只有其 API 的一个子集指定了空值相关的信息。


InfoQ:Spring Boot 每个大版本的最后一个版本为长期支持(LTS)版本。2022 年 5 月发布的 Spring Boot 2.7 获得了 18 个月的免费更新(“开源支持”)和超过 4.5 年的付费更新(通过企业付费支持)。Spring Boot 3.5 将只获得 13 个月的免费更新,但付费更新将超过 7 年。这是出于何种考虑呢?


Michael Minella: 我们尽可能简化小版本升级,但由于大版本升级需要更大的投入,因此我们通常会给予更长的时间支持。例如,2022 年 5 月发布的 Spring Boot 2.7 提供了 18 个月的开源支持和15 个月企业支持。相比之下,Spring Framework 5.3,Spring Boot 2.7 的主要依赖项,提供了 50 个月的开源支持和24 个月企业支持。我们的政策在产品组合中没有保持一致,我们希望在这方面可以做得更好。


因此,我们在 2025 年 2 月更新了支持政策,做出两项重大调整。首先,所有支持时间线现在都与 Spring Boot 保持一致。在以往,产品组合中的支持时间线取决于发布日期——不同项目有不同的支持日期。在未来,用户只需要知道 Spring Boot 的支持日期:开源支持是在与之对应的 Spring Boot 发布之后的 13 个月,企业支持是在之后的 12 个月(都四舍五入到月底)。这一调整在整个产品组合中统一了支持期限,简化为两个支持时间线日期:6 月 30 日和 12 月 31 日。我们目前正在更新网站,使其更加清晰。


其次,我们制定了一个统一的 LTS 政策,而不是像以往那样每个项目各自为政:每个主要版本的最后一个次要版本(如 3.5)在 13 个月的开源支持和一年常规企业支持的基础上,额外获得五年的企业支持。这为用户提供了超过七年的总支持时间线,这是我们迄今为止提供的最长支持时间。


多年来,我们的社区一直明确表示,他们需要更多时间来进行大版本升级。通过提供更多的支持和简化流程,我们以最可持续的方式满足了社区的需求。根据到目前为止的反馈,社区对此表示认同。


开发者可以在这篇 InfoQ 新闻报道中了解有关空值限制和可空类型的更多信息,在这篇 InfoQ 新闻报道中了解 JSpecify 1.0.0。这篇 InfoQ 新闻报道描述了 JEP 483(提前类加载与链接),这是 Project Leyden 的第一个交付成果。


【声明:本文由 InfoQ 翻译,未经许可禁止转载。】


查看英文原文https://www.infoq.com/news/2025/05/spring-aot-jspecify-support/

2025-06-03 18:006291

评论

发布
暂无评论

AppGallery Connect(AGC)平台介绍

小赵学鸿蒙

商务 AppGallery Connect 鸿蒙开发​​工具

京东图片搜索接口抓取指南,搜索相似商品

tbapi

京东图片搜索接口 京东拍立淘接口 京东图片搜索API 京东图片API 京东商品搜索接口

CADintosh X for Mac 技术图形、工程图纸、流程图等

Rose

Mac天气预报组件 Weather Widget Live 随时了解天气!

Rose

Blu-ray Player Pro Mac 支持播放完整的蓝光菜单,蓝光光盘,ISO镜像

Rose

中昊芯英董事长兼CEO杨龚轶凡入选“2025 年度浙江省青年科技型企业家”榜单

科技热闻

NocoBase 本周更新汇总:支持扫码填充数据

NocoBase

开源 低代码 零代码 无代码 版本更新

me2025媒体编码Media Encoder 2025系统要求及安装包下载-mac/win

Rose

Movist Pro mac高清视频播放器,不会卡顿或滞后

Rose

Mac 3D影视特效渲染SideFX Houdini 安装包含注册机及激活补丁

Rose

AppGallery Connect(AGC)使用指南

小赵学鸿蒙

商务 AppGallery Connect 鸿蒙开发​​工具

哪些行业必须做等保

等保测评

智慧政协系统(源码+文档+讲解+演示)

深圳亥时科技

mac鼠标键盘记录工具Mouse and Keyboard Recorder

Rose

融云 AI 机器人上线,独家直连 AI 平台,加速落地创新探索

融云 RongCloud

京东店铺所有商品接口,搜索整店商品

tbapi

京东数据接口 京东店铺所有商品接口 京东店铺商品采集 京东店铺数据采集

Navicat Data Modeler Ess for Mac(数据库建模与设计工具)中文版

Geek贝

光伏、光伏能源、光伏设备制造业AI智能MES系统解决方案

万界星空科技

mes 制造业工厂 光伏能源行业 光伏MES 智能化MES

AppGallery Connect(AGC)总体流程

小赵学鸿蒙

商务 AppGallery Connect 鸿蒙开发​​工具

Mac吉他贝斯效果器 Native Instruments Guitar Rig 7 Pro新功能详解

Rose

Turbo Boost Switcher Pro for mac(cpu温度监测工具)

Geek贝

用好 JUnit 5 的高级特性:提升单测效率和质量

xiaoxi666

Java 单元测试 JUnit 测试 单元测试 junit5

mac虚拟光驱工具 Daemon Tools 中文激活版

Rose

chemdraw2023激活码 附详细安装教程

Rose

AI教育大模型及其应用

北京木奇移动技术有限公司

AI教育 AI技术开发 软件外包公司

企业太小没钱做等保2.0怎么办?

等保测评

开发实践,通过融云 IM + Dify 实现 AI 机器人

融云 RongCloud

Compressor for Mac(视频转码编辑工具)

Geek贝

科学智能赋能空间科学研究(4):中国空间站空间科学实验的未来展望

ModelWhale

科学智能 AI4S 空间科学

Spring Boot 启动优化实践

vivo互联网技术

Java 性能优化 后端 spring-boot SpringBoot启动流程

视频转换编辑压缩和下载工具VideoProc Converter AI 中文版-mac/win

Rose

Spring团队谈AOT缓存处理、空值安全性和支持政策_后端_InfoQ精选文章