首页 / 技术专题CATEGORY / SPRINGFORALL

Java

在这个技术方向,积累扎实的知识与实践。

共 573 篇文章

Spring Framework 7.1.0-RC1 给 RestTemplate 打上 forRemoval,QUERY 带 body 回 200

Spring Framework 7.1.0-RC1 把 RestTemplate 标成 @Deprecated(since="7.1", forRemoval=true),-Xlint:deprecation 编译会报警;同版本 RequestMethod.QUERY 支持带 body,form 与 JSON 均回 200,同路径 GET/POST 是 405 且 Allow: QUERY。用 Boot 4.2.0-RC1(绑 7.1.0-RC1)实测,对照 Boot 4.1.1(7.0.9)无弃用警告、也无 QUERY 常量。

ZGC 自适应堆合入 JDK 28 开发线,1G 容器不设 -Xmx 比固定堆少占 139M

JEP 546 的 ZGC 自适应堆已以 d544fca 合入 OpenJDK 主线(JDK 28 开发线),官方 EA 还停在 Build 20。用自编译的 28-internal-d544fca-local 在 1G 的 cgroup 里跑 Spring Boot 4.1.1:默认 ZGC 堆只有 256M,存活集往 320M 涨时 OOM;固定 768M 堆 cgroup 峰值 889M;只加 -XX:+ZAdaptiveHeapSizing 峰值 750M,负载回落后堆缩到 300M 上下,GC 周期从 77 次涨到 258 次。ZGCIntensity 还能用 jcmd 在运行中调。

Java 的 Stream Gatherers 按金额切批、按字段去重,漏写 finisher 最后一批会丢

Stream Gatherers 在 JDK 24 由 JEP 485 定稿。这里用 JDK 27 和 Spring Boot 4.1 跑了 windowFixed、windowSliding、scan 三个内置 gatherer,再用 Gatherer.ofSequential 写了按字段去重和按累计金额切批两个自定义操作,顺带讲清 push 的返回值怎么让流短路、finisher 怎么在流末收尾。

JDK 27 发布前差点带上一个改坏字符串的 C2 bug,我把旧 EA 版本找回来复现了一遍

JDK 27 GA 前不到一个月,C2 的 EncodeISOArray intrinsic 被发现会把字符串前 4 个字节写坏(JDK-8390546,P1),最后在 GA 构建 27+35 里回退修掉。用 Spring Boot 实测 27-ea+23/24/34、27 GA 和 28-ea+20:ea+24 和 ea+34 稳定复现,关掉压缩对象头就消失。还钉着 27 EA 镜像的该换了。