本期检索说明
先读取 content/collections/deep-radar 的历史原文链接并复查标题语义,排除了上一期已经推荐的 G1 FromCardCache、Zen spill 与 Rust trait solver。检索先覆盖 2026-08-25 至 26 日,不足 2 篇后回溯至最近七日。最终仅保留 2 篇 OpenJDK 原作者 RFR:它们都给出可量化实验、直接源码/指令证据与可迁移的工程结论。
本周期没有收录 Kotlin、Rust、Zig、Linux:近七日候选中,部分只有源码改动或未经说明的单个百分比,部分属于 release note;没有同时满足“实测 + 源码/汇编 + 原理”三项红线。两篇 RFR 截稿时都尚未合入,以下只分析其证据和设计,不把提案写成已发布功能。
| 主题 | 原始发布日期 | 一手来源 | 状态 | 推荐强度 |
|---|---|---|---|---|
| C2 宏展开的临时图内存 | 2026-08-19(北京时间) | OpenJDK RFR / JBS | 评审完成、未合入 | 必读 |
| RISC-V VectorMask 专用指令 | 2026-08-21 | OpenJDK RFR / JBS | 评审完成、未合入 | 推荐 |
01 · C2 为什么会为一次宏展开留下约 200 MB arena 内存
原文与日期: Vladimir Kozlov,GitHub 时间 2026-08-18 16:16 UTC、北京时间 2026-08-19;OpenJDK RFR 8390550,对应 JBS 8390550。
为什么值得读: 这是编译器“活节点已经删除,内存却没有回来”的典型故障。问题不在最终 IR 图有多大,而在 C2 arena 会保留阶段中创建过的临时节点;因此只盯 live_nodes() 很容易低估编译内存。
核心技术结论: SubTypeCheck 宏节点展开会改变 control 与 memory,并产生大量临时 MergeMem。JDK-8239072 为防止节点预算耗尽,在每个宏节点展开后都执行全图 IGVN;重复优化又放大临时节点创建。修复不是取消清理,而是批量展开:默认累计 16 个宏节点,或接近 live-node 上限时再跑一次 IGVN,同时在进入 Allocate 第二阶段前做边界清理。
最有价值的实验、源码与 benchmark 细节: 失败样本 $Proxy132::<clinit> 有 5,967 字节码;C2 为它创建约 100 万个临时 MergeMem,仅这些节点就在 arena 中占约 200 MB。补丁引入 MacroExpansionCleanupCount=16,以每个宏节点最坏约 200 个节点、再留 50% 优化余量,得到 macro_expansion_estimate=300 和动态清理阈值。回归测试生成 140 行、每行 9 个接口参数的巨大方法,并用 -Xcomp -XX:VerifyIterativeGVN=1110 强制覆盖失败路径;另测参数边界 1 与 100。
pending_expansions_to_cleanup++;
if (pending_expansions_to_cleanup < MacroExpansionCleanupCount &&
C->live_nodes() < macro_expansion_limit) {
continue;
}
cleanup_graph(_igvn);适合的工程师背景: 熟悉 C2、IGVN、编译线程内存,或正在排查 -Xcomp、超大生成类、代理类编译失败的 JVM 团队工程师。
预计阅读收益: 约 20–30 分钟;能建立“最终图规模、临时节点总量、arena 生命周期”三者不同的诊断模型,并学会把昂贵全局 pass 改为有内存护栏的批处理。
02 · RISC-V VectorMask:从布尔恒等式直接落到 RVV 单指令
原文与日期: Dingli Zhang,2026-08-21;OpenJDK RFR 8390826,对应 JBS 8390826。
为什么值得读: 它把 Vector API、C2 AD 匹配规则、RVV 指令选择和 JMH 数据完整连起来。工程价值不只在 RISC-V:任何后端都可用相同方法检查“高层布尔组合是否已经有目标 ISA 的专用指令”。
核心技术结论: 原先 not、and(...).not()、or(...).not()、xor(...).not()、eq() 与 or(other.not()) 会落成多条 mask 指令。新增 C2 match rules 后分别发射 vmnot.m、vmnand.mm、vmnor.mm、vmxnor.mm、vmorn.mm,覆盖 byte/short/int/long;IR 测试同时断言正确结果与目标 Mach 节点恰好出现一次。
最有价值的实验、源码、benchmark 与指令细节: 作者在 SG2044 上以 JMH throughput、10 次采样测试 256/512/1024 元素。例如 byte mask equality 在 1024 元素时从 2485.999 ± 23.447 提升到 3783.676 ± 37.133 ops/ms,约 +52%;byte NAND 256 元素从 9239.545 ± 76.134 到 13712.414 ± 87.500 ops/ms,约 +48%。int/long 的 NAND、NOR、OR-NOT、XNOR 多数约提升 18%–20%。单目 NOT 在 int/long 上基本持平,说明“少一条指令”不自动等于吞吐提升,仍需按元素宽度和循环瓶颈实测。
XorVMask(AndVMask(src1, src2), MaskAll(-1)) -> vmnand.mm
XorVMask(XorVMask(src1, src2), MaskAll(-1)) -> vmxnor.mm
OrVMask(src1, XorVMask(src2, MaskAll(-1))) -> vmorn.mm适合的工程师背景: 使用 Java Vector API、维护 C2 后端,或熟悉 RISC-V V 扩展与 JMH 的性能工程师。
预计阅读收益: 约 20–35 分钟;能学会从高层 IR 模式到目标指令、IR 断言、吞吐数据三层闭环验证 peephole/match-rule 优化。
中国大陆 ToC 硬件价格观察
数据口径
窗口为 2026-07 下旬至 2026-08-26,单位人民币。国内公开聚合页没有稳定开放完整逐日原始序列,因此图只连接可复核的报价快照,不插值缺失日期。8 月 26 日可确认 9800X3D 京东价约 ¥3,175;其余五类没有取得新的同 SKU、同口径公开价,故沿用 8 月 25 日最后可核验快照,并明确标成“最近快照”,不冒充当日成交价。
| 类别 | 代表样本与最新可核验价 | 窗口内变化 | 建议 |
|---|---|---|---|
| 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,最近快照约 ¥6,899 | 窗口边界低价 ¥5,249,显存涨价后溢价扩大 | 观望;除非生产力刚需,不追高 OC 型号 |
| 主板 | B850M 同档样本,最近快照约 ¥1,298 | 7/21 TUF 样本 ¥1,332,波动较小 | 可按需入手;优先看供电、M.2 与网卡,不必赌短期大跌 |
| DRAM | Kingston Fury DDR5-6000 32GB,最近快照约 ¥3,900 | 8/7 低价 ¥3,870,仍在异常高位 | 刚需小量入手;AI/HBM 分流产能,短期缺少下跌依据 |
| HDD | IronWolf Pro 8TB,最近快照约 ¥1,540.7 | 近期公开快照持平 | NAS 容量告警时分批买;近线 HDD 供应偏紧,不建议等大幅降价 |
| SSD | ZHITAI Ti600 2TB,最近快照约 ¥749 | 7/26 与最近快照均 ¥749 | 刚需可买但不囤货;NAND 合约价仍有上行压力 |
价格来源: 8 月 24 日国内 9800X3D/9850X3D 京东价对比、9800X3D 慢慢买历史摘要、万丽 RTX 5070 商品百科、华硕 B850M 商品百科、Kingston Fury 32GB 商品百科、IronWolf Pro 8TB 商品百科、ZHITAI Ti600 2TB 商品百科。券后价会随账号、地区、包装与库存变化。
判断依据
存储侧没有把横盘快照解释成供应改善。新华社 8 月 3 日报道援引机构预测,2026 年第三季度 DRAM 合约价环比涨幅预期被上调至 32%,消费级供给仍受 AI/HBM 产能重配影响;8 月 25 日行业报道显示 HBM 占 DRAM 晶圆产能比例已由 2022 年不足 5% 升至 2025 年末约 20%。HDD 同样存在供给压力,公开行业数据称近线盘产能已被长期订单锁定。由此,DRAM、SSD、HDD 的建议都是“刚需分批”,而非等待确定性大跌。
CPU 的判断来自同日同平台价差:9800X3D 约 ¥3,175,而更新的 9850X3D 约 ¥3,295,前者只有在更深折扣时才合理。GPU 仍受显存成本和渠道调价影响;主板的近月波动相对小,适合按功能需求采购。
其它你可能关心的
- Rust
LinkedList迭代器:移除额外分支、补上TrustedLen,以及 benchmark 被优化掉的复盘 - OpenJDK:native → Java fast path 直接切换线程状态,safepoint 慢路径仍进入 VM
本期结论
两篇正文共享一个方法:性能优化要同时证明“为何慢、改了什么、机器码或 IR 变成什么、数据是否真的变好”。C2 案例提醒我们统计临时对象总量而非只看最终图;RVV 案例则提醒我们,指令数减少也必须分类型、分规模测量。硬件部分继续坚持稀疏快照边界:没有公开日价就不伪造连续曲线。