Java周刊2026W37 | Quarkus 三维护版齐发、Micronaut 三公告、Kotlin 2.4.20
本周 JVM 主线是安全维护与诊断能力并进。Quarkus 一次发布 3.39.2 等三个维护版,把 CVE 补丁送到各 LTS 线;Micronaut Core 5.1.14 修复三则安全公告,含解压与 WebSocket 两类 DoS;Elasticsearch 9.5.3 审计写入 protobuf 负载;Kotlin 2.4.20 恢复协程堆栈跟踪。
🌱 Spring生态
A Bootiful Podcast:BellSoft 的 Catherine Edelveis 谈加固运行时镜像、容器安全等等?
加固 Spring Boot 容器的第一步是删掉 Dockerfile,而不是修好它——BellSoft 的 Catherine Edelveis 认为,构建配方本身才是供应链风险进入的地方。手写的 Dockerfile 会锁定某人去年复制来的任意基础层,而 JVM 镜像选择(完整 JRE 还是 slim、glibc 还是 musl)在攻击面与可调试性之间悄然权衡,且没有默认答案。本期节目走查了作为默认构建路径的 buildpacks、加固基础镜像到底剥离了什么,以及如何在不靠猜的情况下选择运行时。
Spring Tools 5.4.0 发布?
Spring Tools 5.4.0 让其 Claude Code 插件能够渲染 Spring 项目的逻辑结构,于是 AI 代理可以浏览模块、bean 和装配关系,而不必从原始文件猜测。一次发布同时覆盖 Visual Studio Code、Cursor、Eclipse、Theia 和 Claude Code,而团队仍在手工维护那些会与其本应编码的架构悄然脱节的注解——新的校验与快速修复可将代码转换为 @ApplicationModuleListener、@SpringJUnitConfig、@RestController 以及特定的 @Scope 值。文章介绍了这些转换、Claude Code 与 MCP 的工作、快速修复与仓库版本校验的提速、索引可靠性提升,以及 Eclipse 2026-09 更新。
📦 版本发布
Jetty 12.1.13?
一个在 45% 的 CI 构建中会失败的脆弱测试,是 Jetty 12.1.13 十八项修复之一;两处脆弱测试修复以及一个 BouncyCastle ALPN 缺陷,均来自被发布说明点名致谢的社区贡献者。在这个补丁版本背后,是强化的连接失败处理、SignInWithEthereum 认证改进、MultiPartCompliance 配置修复、URI 规范路径匹配、FCGI 查询处理、可自定义的优雅关机拒绝响应,以及更精简的 HTTP/3-with-Quiche 依赖集。文章列出了每一条带 issue 编号和贡献者署名的变更日志条目。
Vert.x 5.1.8?
Elasticsearch 9.5.3?
启用请求体审计后,原始 protobuf 负载会被写入 Elasticsearch 审计事件,而过大的请求体会被直接拒绝,而不是被静默丢弃。体级审计是查看实际发送内容的唯一方式,但捕获它会把请求大小变成一条新的失败路径——而 min_hash 极端值更糟,此前错误的参数会导致整数溢出和内存溢出错误,直到 9.5.3 为其加上了上限。该版本还修复了列式 MV_MIN/MV_PERCENTILE 与 BYTE_LENGTH 结果、ES|QL ROUND 溢出与丢失的 TS STATS 聚合、节点关闭时的 translog 泄露,以及推理密钥轮换。
Micronaut Core 5.1.14?
Micronaut Core 5.1.14 修复的三则安全公告中,有两则是拒绝服务缺陷,其共同点是服务器信任客户端会停下来:分片的 WebSocket 消息会无界增长内存,而 gzip/deflate 请求体在解压时没有上限。第三则在日常暴露面上可能更糟:默认错误响应总是返回原始异常消息,且无法抑制,因此在你打补丁或安装自己的错误处理器之前,内部细节会直达调用方。发布说明列出了全部三个 GHSA 编号、链接到各公告,并指向完整的 v5.1.13…v5.1.14 变更日志。
📖 文章与教程
从规范驱动开发到 Java 项目中的活规范?
一篇聚焦 Java 的有趣文章探讨了一种更持久的模型:让规范更贴近代码,使它们在系统演进过程中依然有用、可测试且保持活力。
用 Java 软件与内在函数加速 Curve25519 域运算?
仅拓宽内部数据结构——无需新的汇编,也无需新算法——就令 JDK 27 build 14 中的 X25519 密钥生成与协商性能提升 49-54%,紧随其后的 Ed25519 也达到 46-49%。Curve25519 是 X25519 密钥交换、Ed25519 签名以及如今正进入 TLS 1.3 的 X25519MLKEM768 后量子混合组的基础,因此每一次握手和签名都要付出这一成本。JDK 28 随后添加了 x86_64 与 AArch64 内在函数,在软件成果之上再叠加 7-20% 的提升。文章拆解了各算法的吞吐量数字、承载这些改进的 JDK 构建版本,以及收益如何通过 JCE 与 JSSE API 显现。
绕开 HTTP 403 进行调试且不破坏 Spring Security?
你的 SecurityConfig 源码可能谎报应用实际强制执行的规则:当存在多个 SecurityFilterChain bean、匹配器顺序、激活的 profile 以及条件化注册的配置时,运行中端点所要求的角色往往与你能读到的任何配置类都不同。因此当 403 让断点永远无法命中时,猜测该禁用安全还是调整 HTTP 客户端,每次尝试都要重启一次。文章介绍了 IntelliJ IDEA 的安全内嵌提示,它内联展示所需的 hasRole/hasAuthority 匹配器,将自定义 AuthorizationManager 规则标记为未知,链接到真实的配置代码,并允许你在运行时跳过或重新指派授权。
针对缺失的可选依赖测试你的自动配置?
Spring Boot 自带的 FilteredClassLoader 无法复现最常见的可选依赖启动失败。一个返回类型来自缺失库的 @Bean 方法会破坏同一个类里所有无关的 bean,因为 JVM 会在 Class.getDeclaredMethods() 中解析所有已声明的方法签名,并在通过 ASM 元数据读取的 @ConditionalOnClass 生效之前抛出 NoClassDefFoundError。文章自底向上走查了堆栈跟踪,解释了该条件为何救不了你,并给出了一个用于复现该问题的小型 HidingClassLoader。
未发现数据库操作:编写 Spring Boot 分析器教会我的 Spring 之道?
一个 Spring Boot 分析器扫描了 PetClinic REST 的 10 个控制器和 528 个方法,只报告了一个端点——一个跳转到 Swagger 的重定向——而该应用实际提供约 36 条路由。每个严重缺陷都有同一种形态:自信的缺位,工具宣称某个端点未接触数据库、未开启事务、未发布消息,而它其实三者全做了。原因在于 Spring 会运行源码中看不到任何调用的代码,且映射位于接口而非主源码上。文章走查了以处理器为先的代码阅读方式所遗漏的东西。
在不破坏分析的前提下脱敏 JVM 线程转储?
一份生产环境线程转储泄露的远不止堆栈跟踪:像 sync-tenant-acme-prod 这样的线程名会泄露租户和客户名称,而几百帧的包名、类名、方法名和源文件名足以重建你的模块布局以及你集成了哪些供应商。脱敏并非剔除标识符那么简单,因为被分析的结构正是工具发现虚拟线程固定等问题所需要的。文章介绍了 tm-anon,一个 MIT 许可的本地 CLI,可在上传前重写转储,同时保持任何分析器正常工作。
通过 Firmata 将 Raspberry Pico 引入 Quarkus?
更改 LED 所在的引脚不再意味着重新编译和重新烧录固件:Pico 运行通用的 Firmata 固件,而主机只需发送命令。Quarkus Firmata 正是利用这种反转,让 JVM 应用无需离开 Java 即可读取传感器、驱动电机和让 LED 闪烁,尽管它必须桥接三个活动部件——Quarkus 依赖注入、作为 Java 客户端的 firmata4j,以及板子上的 ConfigurableFirmata——且 MVP 有意只做到数字 I/O、模拟输入、PWM 和 USB 串口。文章拆解了其架构、受 MIDI 启发的二进制消息格式以及特性发现机制。
我十年求索:让 Java 集合超越 Java Stream?
二十二年过去,获得更好 Java 集合的最可靠途径并不是 JDK:Eclipse Collections 特意采用 EPL 1.0 与 EDL 1.0 双许可,以便其代码能合法流入 OpenJDK,但这一切从未发生——只有思想悄然跨界而过。Java Stream 在 Java 8 到来时仍处于熔融状态,此后逐渐固化,而且平台上不会有新的集合库出现,因此在 2026 年想要更丰富集合的人必须从开源替代方案中挑选。文章追溯了 GS Collections 在 2012 年由高盛开源、2015 年迁至 Eclipse 基金会,以及那场押注 OpenJDK 背后的许可考量。
Java 内存管理原则?
Java 并非因为占用内存过多而浪费——其他语言可能因为占用过少而浪费。这一反转奠定了一场 JavaOne 2026 演讲的基调:为何 JDK 的垃圾收集器共享那些令它们区别于其他收集器的设计选择,而这些选择是每位 Java 开发者都该理解的。问题在于内存从不单独取舍:RAM 与 CPU 协同变动,因此孤立地调优堆大小会悄然降低吞吐量。演讲走查了 JDK 收集器的实际工作方式、这些设计决策如何塑造应用性能,以及何时值得用内存换 CPU。
Quarkus Insights 第 258 期:Quarkus 特性开关?
Quarkus 已经提供了 OpenFeature 和 Unleash 集成,但核心开发者 Martin Kouba 仍然构建了第三个第一方特性开关扩展。那些生态方案会引入外部开关服务器或付费 SaaS 订阅,而企业团队想要的是无需基础设施账单、也不受静态配置上限限制的动态运行时开关——后者在事故中途会阻断 kill switch。第 258 期走查了这个零基础设施扩展的统一 API、CDI 集成、Dev UI 开关编辑、基于 Hibernate 的存储、安全身份上下文与 Qute 渲染,此外还介绍了 3.39.2 / 3.33.2 / 3.27.5.2 安全版本以及即将到来的 Quarkus 4 alpha。
Kotlin 2.4.20 发布?
Kotlin 协程多年来产出的堆栈跟踪从不命名任何真正挂起的函数,而 2.4.20 标准库终于为它们提供了恢复能力。调试异步代码过去意味着猜测是哪个挂起调用炸了,而多平台团队同时还要应对 Swift 导出、Wasm 和 JS 目标,其工具链每个版本都在变动。文章介绍了新的标准库相等性与唯一性辅助函数、kotlin.test 重载、面向 SwiftPM 自动生成的 Package.swift、Wasmtime 支持、Kotlin/JS 浏览器测试 DSL、Gradle 9.7.0 支持,以及新的 kotlinr 运行器。
Kotlin Toolchain 0.12:多平台库发布、Wasm 应用等等?
发布一个 Kotlin Multiplatform 库现在所需的配置,与 JVM-only 预览版完全相同:0.12 会产出通用 API、每个目标一个构件、源码,以及让构建工具自动挑选合适部分的模块元数据,此外 cinterop 绑定同时以通用化和按平台两种方式发布。多平台使用者通常不得不自行搭建互操作,Compose Multiplatform 资源仍未发布(KTC-5698),而 Sonatype 即将实施的 Maven Central 配额迫使工作流改变。文章介绍了预览状态的 Wasm 应用支持、命令行下的 Compose Hot Reload、klibs.io 生产后端,以及本地 Jib 与 Git Properties 插件。
Quarkus 3.39.2、3.33.3.2 LTS、3.27.5.2 LTS —— 维护版本发布?
一次 Quarkus 维护版本发布同时推出三个版本号:3.39.2 与 LTS 向后移植版本 3.33.3.2 和 3.27.5.2,因为本轮修复的 CVE 必须抵达每一条受支持的长期支持线,而不仅仅是最新的主线。停留在 LTS 分支上的团队无法简单地跳到 3.39 来获得补丁,因此向后移植是他们唯一安全的选择,而任何跨大版本迁移的人仍要面对 3.39 迁移指南。文章介绍了缺陷修复与文档内容、可将应用从任意版本(包括 2.x)升级的 quarkus update? 命令,以及完整变更日志的查看位置。
计算领域最古老的架构?
Werner Vogels 从大脑中寻找有用代理记忆应有的工作模型。一个迷人的论点是:可信、自主代理的下一个突破,可能来自研究我们所知最古老的计算架构。
用 Astra 编码:我们为何又要这么做??
一个在计算机使用上表现惊人、精通图像与复杂话题、并且不屈不挠完成任务的人工智能模型,仍然让 Armin 无法用它做真正的软件工程。他把所有 AI 工程都称为 Neijuan——内卷——即那种提高每平方米产量而人均生产率持平的耕作。为了测试 Astra,他运行了一个周末软件工厂:模型自选工作流、维护一个 agent-notes 文件夹,并派生子代理去构建一门带虚拟线程和词法作用域的 Python,烧掉了一整轮 token 重置。文章分享了产出的代码,以及这些模型为何抵制真正的工程工作。
LLM 即裁判的生命周期:规模化下的构建、对齐与监控?
一个悄然开始批准糟糕输出的裁判不会触发下游任何告警——静默漂移,而非部署成本,才是 LLM-as-a-Judge 的真正风险。规模化生成文本的团队无法逐条阅读输出,于是用第二个模型给第一个模型打分,作为人类评分者的廉价代理;但随着数据和使用方式变化,这个代理会不知不觉地退化。文章走查了四个阶段的生命周期——对照可信人类标签构建、对齐人类偏好与推理、在人类设定的策略下运行、以及长期维护——每个阶段都有人类负责人和 HITL 参与,并以推荐解释作为贯穿示例。
你的 AI 代理到底跑过调试器吗?一个 JVM 缺陷,两次代理运行?
大多数 AI 编码代理从不运行调试器——它们读堆栈跟踪、读源码,然后提出一个推理看起来很棒、但对一个没人运行过的程序仍属猜测的补丁。这里的缺陷是 Kotlin 自动补全特性中一次未加防护的 NIO 调用:Files.isDirectory 对受保护的 Windows Installer 目录 C:`Config.Msi返回 true,随后Files.list` 抛出异常,而流边界处没有任何捕获,于是它表现为未处理的协程异常,IDE 则把责任归咎于插件。用同一个模型和同一个提示把同一个真实 JVM 缺陷跑两遍,展示了跳过调试器所要付出的代价。
从零构建一个 AI 代理?
大多数读者永远不会在生产环境交付 AI 代理,但这位书评人仍将《Build an AI Agent》与《Kubernetes in Action》《API Design Patterns》并列为定义职业生涯的参考书。代理炒作已经超过了理解:代理循环、工具使用、RAG、记忆、规划、代码执行和多代理编排到处被挂在嘴边,却很少有从业者能解释这些部件如何配合。书评走查了全部十章、315 页,然后指出了唯一弱点——评估代理值得在下一版中大幅深入。
潜在能力?
从亚马逊订购了一台 Carlinkit Mini Ultra 来运行 CatPlay——一个 CarPlay 协议的 Rust 重新实现。24 小时后收到的设备贴着同样的品牌,内部却藏着一块与 CatPlay 所针对的完全不同的 SoC,而这通常是硬件改造终结的地方。移植意味着逆向工程一个未文档化的克隆产品、找到刷机方法,并让别人的 Rust 构建跑到一块不受支持的芯片上,全程都有把加密狗变砖的真实风险。文章走查了硬件拆解、刷机路径以及 AI 辅助的移植工作。
JetBrains IDE 中 WSL 支持的演进?
JetBrains 在选定最终方案前尝试了四种不同的 WSL 架构:从 2026.2 开始,在 IntelliJ IDEA、WebStorm 或 PhpStorm 中打开 WSL 项目将运行 Native 模式——IDE 保持为 Windows 应用,而 WSL 内部的一个小型代理为其处理文件与进程。此前每一次尝试都必须让终端、运行/调试和性能分析功能以近乎零延迟的方式作用于 Linux 项目,否则编码体验就不再像原生。文章追溯了 9P、Remote Development、WSLg 与 Native 模式,以及为何最后一种才是正确的基座。
超越提示词:面向生产级 AI 的上下文工程?
巧妙的提示词并不是让生产环境 AI 可靠的原因——你发送给模型的上下文是一种架构资源,输出一致性来自你如何设计检索、记忆、工具使用和评估,而不是提示词的措辞。大多数团队已经越过原型阶段,如今面对的是运维苦工:幻觉、不一致的检索、跨交互丢失的状态、评估缺口以及不断上涨的 token 成本。文章拆解了如何构建能持久保存关键信息的记忆、如何在不淹没上下文窗口的前提下检索,以及把一个朴素应用改造为工程化上下文流水线的那些改动。
从 OpenTelemetry 到 DuckDB?
你的可观测性平台希望每个问题都在它自己的查询语言中被提出,但一条 shell 管道就能把生产环境的 OpenTelemetry span、日志和指标直接交给 DuckDB 用真正的 SQL 查询——无需导出文件,也无需导入步骤。仪表盘只能回答你早已预料到的问题;一旦你想要一个百分位数、按状态码做透视,或想知道哪个服务真正吃掉了延迟预算,临时查询就卡住了。文章走查了安装 Dash0 CLI、将遥测数据转为 Parquet,以及运行黄金信号查询(包括按服务的延迟占比与延迟直方图)。
☕ JVM周报
1. 为什么 Arrays.fill 在 G1 上慢 265 倍?
- 为什么
Arrays.fill在 G1 上慢 265 倍 让我从 Krzysztof Ślusarski 开始,你们中有些人通过他的 JVM 性能分析演讲以及他围绕 async-profiler 的工具认识他,他在 8 月 19 日发表了《Why isArrays.fill265 times slower on G1GC?》。其中的基准测试只是借口。Ślusarski 从两个各含一百万个引用的数组开始,对两者执行Arrays.fill,一次使用 ParallelGC,一次使用
2. Sloth:会重写别人库的 JVM 代理?
- Sloth:会重写别人库的 JVM 代理 Scala 3.9 LTS 于 9 月 3 日落地,由 VirtusLab 的 Wojciech Mazur 宣布,我也在该公司工作。我不打算带你们走查这次发布本身(SIP-71 into 已稳定,
Scala.js1.22 随稳定的 WebAssembly 后端一同到来,其余都在说明中),因为更有趣的是这次发布所暴露的东西。代码编译
3. Java 即数据:Netflix 的 Conductor 与选择了代理的 Gradle?
- Java 即数据:Netflix 的 Conductor 与选择了代理的 Gradle 生态最后一次听到 Conductor 的消息是 2023 年 12 月的一则 GitHub 说明:Netflix 将停止维护 Conductor OSS,把资源转向内部分叉,社区则以 conductor-oss 的名义在 Orkes 下接手。《Netflix Conductor: The Next Chapter》,由 Aravindan Ramkumar 于 8 月 21 日代表
往期精选
- Java周刊2026W36 | JDK 28 值类预览、Spring Boot 4.1.1、Spring Cloud 2025.1.3、Quarkus 3.39.1
- Java周刊2026W35 | JDK 28 值类、Spring Boot 4.1.1、Spring AI 2.0.1、Quarkus 3.39.1、GraalVM 25.3.4.1
- Java周刊2026W34 | JEP 540 瞄准 JDK 28、A2A Java SDK 1.2.0、LangChain4j 1.19.0、Stubborn Contract 0.1.0
- Node.js周刊2026W37 | 三处进程崩溃修复、fs 内置 glob、Workers 模块注册表、Vitest 5.0
- Web前端周刊2026W37 | Shopify 转原生、React 编译 Rust 化、Vitest 5.0、Rslib 1.0
- Go周刊2026W36 | Go 1.27.1 发布、TinyGo 0.42、HTTP/2 原生迁入 net/http、quic-go 0.62
扫码关注「右耳朵猫AI」

- 点赞
- 收藏
- 关注作者
评论(0)