本期检索说明

先读取 content/collections/deep-radar 中 2026-08-25、26 两期的全部原文链接,并按标题语义复查,未重复收录 G1 FromCardCache、Zen spill、C2 宏展开与 RISC-V VectorMask 等主题。检索先覆盖 2026-08-26 至 27 日,随后回溯到最近七日。

最终收录 2 篇 OpenJDK 原作者 RFR。连续两期正文仍偏 Java,并非刻意凑齐:本周期的 Kotlin、Zig 与 Linux 候选没有同时给出实测、源码/汇编证据和原理闭环;Rust 的 wasm32 target_has_threads 修复虽触发 rustc-perf,但 0.2% 指令数回退无法在本地或下载构建中复现,不足以作为性能结论。质量红线优先于领域配额。

主题 原始发布日期 一手来源 截稿状态 推荐强度
C2 消除滞后一拍的循环变量 2026-08-26 OpenJDK RFR / JBS Draft,未合入 必读
Generational Shenandoah 标记热路径 2026-08-21 OpenJDK RFR / JBS 2026-08-26 已合入 推荐

01 · 一条 mov 消失,为何默认配置下几乎没有收益

原文与日期: Boris Ulasevich,2026-08-26;OpenJDK RFR 8360517,对应 JBS 8360517

为什么值得读: 这是一份罕见的“优化成功但收益不成立”记录。作者不仅证明 C2 可以消掉 ArrayList.Itr 中每次迭代的寄存器复制,也主动展示默认循环展开会吞掉收益,并找到真实方法 1%–3% 的回退。它比只报一个漂亮的 microbenchmark 更接近编译器工程的真实决策。

核心技术结论: ArrayList.ItrcursorlastRet 是同一 recurrence 的两个相位:前者已经加过 stride,后者滞后一拍。迭代器逃逸分析后被标量替换,lastRet 不落内存,但它仍被 loop-exit Phi 和 safepoint debug info 引用,寄存器分配器因此在循环体保留一次复制。补丁把循环外或调试信息中的旧值改写为 incr - stride,让循环只携带一个 induction value;改写挂在已有 final_graph_reshaping_impl 遍历中,不增加整图 pass。

最有价值的实验、源码、benchmark 与汇编级证据: C2 新增 EliminateDoubledIndex,对 PhiSafePoint debug inputs 识别 AddI(phi, ConI(stride)),再把滞后值替换为 AddI(incr, -stride);IR 回归测试直接断言最终代码中不存在 PhiInputSpillCopy

C++
Node* incr = phi->in(2);
if (incr->Opcode() == Op_AddI && incr->in(1) == phi && incr->in(2)->is_Con()) {
    jint stride = incr->in(2)->get_int();
    n->set_req(i, new AddINode(incr, ConINode::make(java_subtract(0, stride))));
}

在 AArch64 release build、成对运行、5 次测量下,-XX:LoopMaxUnroll=1list_foreach0.508 ± 0.016 降到 0.293 ± 0.009 ns/oparray_double_index0.494 ± 0.011 降到 0.246 ± 0.009 ns/op。但默认 LoopMaxUnroll=16 时前者为 0.085 → 0.087 ns/op,没有改善;MethodTypeDesc.ofDescriptor() 则从 58.150 变为 60.211 ns/op,回退约 3%。原因是去掉 mov 后在热路径增加了 add,而展开后的复制成本已被摊薄。

适合的工程师背景: 熟悉 C2 IR、Phi、safepoint debug info、寄存器分配,或正在评估“少一条指令”类 peephole/loop 优化的 JVM 工程师。

预计阅读收益: 约 25–40 分钟;最大的收获不是补丁本身,而是学会用受控参数确认机制、再用默认配置和真实方法推翻过度乐观结论。

02 · Generational Shenandoah:把每个 oop 的地址运算与分支移出热路径

原文与日期: William Kemper,2026-08-21;OpenJDK RFR 8390907,对应 JBS 8390907。补丁经 Kelvin Nilsen 与 Aleksey Shipilev 评审,于 2026-08-26 合入。

为什么值得读: GC 标记循环里,单项看似微不足道的减法、边界检查、非内联调用和 affiliation lookup 会乘上扫描的每个 oop。这个补丁没有发明新算法,而是把六个热路径成本逐一归因并合并验证,展示了运行时底层最常见、也最可迁移的优化方式。

核心技术结论: 只有 remembered-set scan closure 需要把特定 old→young 指针重新记卡,因此以模板参数静态裁掉其他 closure 的 re-remember 分支;同时把 region affiliation 数组预先 bias 到 heap base,令索引直接使用 address >> region_shift,避免每个 oop 再减 heap-base region index。已解码 oop 走带断言的重载,跳过生产路径 is_in_reserved;card dirty 与 age census 搬到 inline header;old→young 判断先用地址位运算排除同 region,再访问 affiliation 数组。

最有价值的实验与源码细节: SPECjbb2015 上这些改动合计使 mark time 缩短 10%–12%。最能代表优化思路的是两段 fast path:同 region 判断只需 XOR 后右移;不同 region 才以 atomic load 查询被 bias 的 affiliation 数组。

C++
static bool is_in_same_region(const void* p, oop obj) {
    return (((uintptr_t)p ^ cast_from_oop<uintptr_t>(obj))
            >> region_size_bytes_shift()) == 0;
}

const size_t index = p2u(obj) >> ShenandoahHeapRegion::region_size_bytes_shift();
return AtomicAccess::load(_biased_affiliations + index) == affiliation;

评审中特别确认了顺序选择:先做较窄但纯地址的 same-region 检查,并不是为了完整判断 affiliation,而是为了在大量同 region 指针上避免两次 affiliation bitmap/array 访问。这是比“减少分支”更准确的微架构解释:先用寄存器内算术过滤,再触碰共享元数据。

适合的工程师背景: 熟悉 Shenandoah/G1 remembered set、对象图标记、HotSpot C++ 模板与 cache-sensitive hot loop 的 GC/运行时工程师。

预计阅读收益: 约 30–45 分钟;能获得一套可迁移的热循环审计清单:静态特化、地址 bias、已验证输入的窄接口、内联边界,以及“便宜过滤器先于共享元数据访问”。

中国大陆 ToC 硬件价格观察

数据口径

窗口为 2026-07 下旬至 2026-08-27,单位人民币。图只连接可以公开复核的报价快照,不插值缺失日期。8 月 27 日没有取得六个代表 SKU 的新同口径公开成交价,因此不新增伪精确点;“当前价”仍采用最近 1–2 天可核验快照。另有 8 月 26 日 B850M 市场样本到手价 ¥799,但型号不同,只作为板类市场信号,不接入原同档样本折线。

中国大陆六类 PC 硬件近 30 天价格快照

类别 代表样本与最近可核验价 近 30 天走势 建议
CPU Ryzen 7 9800X3D,8/26 约 ¥3,175 8/10 促销 ¥2,283,8/21 ¥2,597,随后回弹 观望;9850X3D 约 ¥3,295,只贵约 ¥120,9800X3D 需回到更深折扣才划算
GPU 万丽 RTX 5070 OC 12GB,8/25 约 ¥6,899 窗口低点约 ¥5,249,显存成本推动溢价扩大 观望;非生产力刚需不追高 OC 型号,短期缺少明确降价催化
主板 B850M 同档样本,8/25 约 ¥1,298 同档位近月小幅回落;8/26 出现其他品牌 ¥799 促销样本 可按需入手;跨品牌价差已扩大,重点比较供电、M.2、网卡而非只看芯片组
DRAM Kingston Fury DDR5-6000 32GB,8/25 约 ¥3,900 8/7 约 ¥3,870,高位横盘 刚需小量买;消费级供给仍被 HBM/服务器需求挤压,不建议囤货
HDD IronWolf Pro 8TB,8/25 约 ¥1,540.7 可核验快照持平 NAS 容量告警时分批买;近线盘长期订单锁产能,等待大跌的胜率不高
SSD ZHITAI Ti600 2TB,8/25 约 ¥749 7/26 至最近快照持平 刚需可买但不囤;横盘不等于 NAND 供应压力解除

价格来源: 9800X3D 与 9850X3D 国内同日价差9800X3D 历史价格摘要RTX 5070 商品百科B850M 商品百科8 月 26 日 B850M 市场样本Kingston Fury 32GBIronWolf Pro 8TBZHITAI Ti600 2TB。券后价会随账号、地区、包装与库存变化。

判断依据

CPU 建议来自同平台同日价差而非新品宣传:9800X3D 与 9850X3D 仅差约 ¥120,旧款当前没有价格优势。GPU、DRAM 与 SSD 仍共同受显存/存储颗粒紧张影响;公开行业追踪显示,32GB DDR5-6000 海外均价一年约上涨 429%,中国显卡渠道也已出现 RTX 50 系列调价,因此没有把单日促销视为趋势反转。主板不直接消耗显存颗粒,且同芯片组跨品牌价差显著,现阶段更适合按功能筛选。

其它你可能关心的

本期结论

两篇材料给出互补的性能工程教训。C2 案例证明删除寄存器复制只是机制正确,默认展开与新增算术可能让收益归零甚至回退; Genshen 案例则展示当工作位于“每个 oop 都执行”的热循环时,六个有明确成本模型的小改动如何累积为 10%–12%。判断优化是否值得合入,必须同时看 IR/源码形态、默认配置、真实工作负载与负结果。