本期检索说明
先读取 content/collections/deep-radar 截至 2026-09-03 的全部原文链接,以 URL、标题与技术问题语义去重。最近 24 小时内只有下面两项一手材料同时具备实测数据、源码或汇编生成路径证据、原理解释和可迁移的工程结论,因此本期收录 2 篇,不用发布说明或浅层教程补位。
两项修改截至截稿均处于公开评审阶段。本文分析的是可复核的补丁、测试与性能结果,不把它们写成已经进入稳定版的事实。Kotlin/Native 浮点解析器回退到 C 实现的候选虽给出了内部性能任务链接,但没有公开数值;Zig 与 Linux 本窗口内也没有发现满足全部硬门槛且未在历史报告出现的新材料。
| 主题 | 原始发布日期 | 一手来源与交叉验证 | 截稿状态 | 推荐强度 |
|---|---|---|---|---|
| rustc 增量会话垃圾回收 | 2026-09-03 21:12(中原标准时间) | Rust PR / 回归测试 / rustc-perf / 原始正确性修复 | Open,未合入 | 必读 |
HotSpot VerifyOops 重定位去膨胀 |
2026-09-04 09:17(中原标准时间) | OpenJDK PR / JBS / AArch64、RISC-V 源码 / x86 前案 | Open,未合入 | 必读 |
01 · Rust:结束编译后,让当前增量会话也参与垃圾回收
原文与日期: Charlie Marsh,2026-09-03 21:12(中原标准时间);rust-lang/rust PR #162240。交叉验证见引入“跳过当前会话”逻辑的 PR #147821,以及本次 rustc-perf 对比。
为什么值得读: 这是一个很典型的生命周期状态错误:同一个目录在“编译仍活跃”和“编译已完成”两个阶段具有不同的回收资格,但旧判断只比较目录名,无法表达状态。结果不是无限泄漏,而是每次构建结束都保留“上一次快照 + 本次已完成快照”,下一次启动删掉旧快照后又留下新的多余副本。问题隐蔽,却会稳定地把增量查询缓存放大到接近两倍。
核心技术结论: 当前会话目录只应在锁仍由本次编译持有、目录尚未 finalized 时被排除。原始 #147821 是为修复非 Linux Unix 上 fcntl(F_SETLK) 锁在同一进程内不能可靠互斥:一次很慢的 dep-graph 加载可能让新建目录超过 10 秒回收年龄,随后被自己的进程错误删除。因此不能简单撤销“跳过当前目录”;正确修复是在 finalize 释放锁以后,让它重新进入回收候选,只保留最新完成会话。
核心补丁只增加一个状态条件,却把所有权与生命周期边界表达完整:
- if directory_name.as_str() == current_session_directory_name {
+ if directory_name.as_str() == current_session_directory_name
+ && !is_finalized(directory_name)
+ {
// 活跃会话必须跳过;finalize 后则可参与回收。
return None;
}新回归测试连续编译三次:第一次在会话目录写入 sentinel,随后每轮断言旧目录已经消失、新目录仍继承 sentinel,并且 crate 目录下始终只有一个 session。它同时验证了“旧会话被删除”和“最新增量状态没有丢失”,不是只看磁盘大小的脆弱测试。
最有价值的实验、源码与 benchmark 细节: 作者在 Ruff 与 uv 两个真实大型 Rust 项目上测试,query cache 几乎精确缩小 50%;整个 target 目录分别缩小 27.3% 和 31.1%。rustc-perf 没有 primary 指令数回退,只有 1 个 secondary workload 改善 0.1%;bootstrap 为 477.112 秒到 477.159 秒(+0.01%),artifact 从 401.86 MiB 降至 401.22 MiB(-0.16%)。需要保留的负面结果是 1 个 secondary Max RSS 样本上升 7.2%,cycles 则混合出现 1 个 +2.7% 回退和 2 个平均 -5.2% 的改善。也就是说,这个补丁的主要收益是持久化缓存占用,不应包装成普遍编译提速。
适合的工程师背景: 维护编译器增量缓存、构建系统、本地 artifact GC,或正在处理跨平台文件锁与进程内所有权语义的 Rust/基础设施工程师。
预计阅读收益: 约 30–40 分钟;可以迁移一条可靠原则:回收策略必须同时编码资源身份和生命周期状态。修复空间泄漏时,还要用连续多轮测试证明“保留最新、删除过期”,并分别报告磁盘、运行时间、RSS 与产物体积。
02 · HotSpot:调试字符串需要重定位,但不该进入全局外部地址表
原文与日期: Vladimir Kozlov,2026-09-04 09:17(中原标准时间);OpenJDK PR #32693,对应 JDK-8391442。机制与数量级由已进入 JDK 24 的 x86 同类修复 PR #19871 交叉验证。
为什么值得读: -XX:+VerifyOops 是 fastdebug VM 中定位坏对象引用的重要手段。每个 verify_oop*() 调用都带一段包含寄存器、文件和行号的错误字符串。JDK-8390914 为 AArch64 与 RISC-V 的字符串地址补上重定位后,C1 压力测试在 -Xcomp -XX:+VerifyOops 下超时。问题不在验证逻辑本身,而在把大量一次性、互不相同的调试字符串登记成全局 ExternalAddress,反复扩容和处理外部地址表。
核心技术结论: “需要生成重定位记录”不等于“地址必须进入全局外部地址槽表”。补丁保留 external_word_Relocation,但通过 spec_for_immediate() 把字符串地址编码为 relocation data 中的立即数;运行时仍能识别和修补该地址,同时避免为每条唯一错误消息分配全局 external-address slot。
AArch64 的 _verify_oop / _verify_oop_addr 从 ExternalAddress 改为带立即数重定位的普通 Address:
- lea(rscratch1, ExternalAddress((address)b));
+ lea(rscratch1,
+ Address((address)b, external_word_Relocation::spec_for_immediate()));RISC-V 的两条路径做相同替换:
- la(t0, ExternalAddress((address)b));
+ la(t0,
+ Address((address)b, external_word_Relocation::spec_for_immediate()));这也维持了 RISC-V 源码中的另一个不变量:scratch emit 与 normal emit 产生的指令序列长度不能依赖字符串地址,否则 Mach node 尺寸会不一致。测试部分撤销了临时加入的 -XX:-VerifyOops,让四组 C1 CanonicalizeArrayLength 配置重新覆盖真实验证路径。
最有价值的实验、源码与汇编生成细节: 当前 AArch64/RISC-V 修复在多轮 -Xcomp -XX:+VerifyOops 测试中约快 3 倍,并不再超时,同时通过 tier1。x86 前案给出了更清晰的机制数量级:把循环减少 10 倍后,无 VerifyOops 时外部地址表只有 38 项,启用后暴涨到 125,922 项;改用不占全局槽位的地址字面量后降至 42 项。旧实现还会持续反优化、重编译 java.lang.Throwable::<init>,使唯一调试字符串不断进入可增长数组;因此 3 倍改善不是少一条指令,而是消除了全局元数据结构的病理增长。
这里仍有两个边界:数据来自 fastdebug + VerifyOops 的诊断压力路径,不代表 product VM 的业务吞吐;本次补丁还在评审中,最终合入状态和不同架构的 relocation 细节仍可能变化。
适合的工程师背景: 熟悉 HotSpot MacroAssembler、CodeBuffer/relocation、C1 编译与 fastdebug 诊断,或正在排查“调试开关导致编译时间非线性增长”的 JVM 工程师。
预计阅读收益: 约 35–45 分钟;能掌握一套适用于 JIT、链接器与代码缓存的排查方法:先统计元数据表项增长,再追踪每个地址的唯一性与生命周期,最后区分“必须可重定位”和“必须经全局间接表”这两个经常被混为一谈的需求。
中国大陆 ToC 硬件价格观察
数据口径
窗口为 2026-08-06 至 2026-09-04,单位人民币。六类硬件继续跟踪固定 SKU;本期新增两条 9 月 4 日可复核采样,未发现新报价的品类保留最后真实日期。折线只连接真实观测,不插值,也不会把搜索或抓取日期冒充价格变化日期。公开最低价可能来自不同零售商,适合观察“可买到的报价事件”,不等同于全市场成交均价。
| 类别 | 固定样本与最新可复核价 | 30 日窗口内真实走势 | 建议 |
|---|---|---|---|
| CPU | Ryzen 7 9800X3D,9/4 ¥2,597.15 | 8/21 ¥2,609 → 9/3 ¥2,599 → 9/4 ¥2,597.15,累计 -0.45% | 可按需入手;连续两次只小幅下探,继续等待的已证实价差有限 |
| GPU | MSI RTX 5070 VENTUS 3X 12G,8/29 ¥4,464.34 | 仅 1 个可复核低价点;同页京东报价曾为 ¥7,299 | 观望并核对渠道保修;近期 RTX 50 系列厂商调价仍偏上,低价离群点不能代表普遍成交价 |
| 主板 | ASUS TUF B850M-PLUS WIFI7,9/4 ¥1,299 | 8/31 ¥1,449 → 9/2 ¥1,299 → 9/4 ¥1,299,累计 -10.35% 后持平 | 可入手;降价后连续采样未反弹,接口和供电满足需求即可 |
| DRAM | Kingston FURY Beast DDR5-6000 32GB,9/2 ¥3,900 | 8/7 ¥3,870 → 9/2 ¥3,900,+0.78% | 刚需小量买,不囤;公开报价未下跌,上游 DRAM 仍处偏强环境 |
| HDD | IronWolf Pro 8TB ST8000NE001,9/1 ¥1,849 | 新口径下仅 1 个真实点 | 观望或容量告警时分批买;样本不足以判断方向 |
| SSD | ZHITAI Ti600 2TB,9/2 ¥1,919 | 新口径下仅 1 个真实点 | 观望并比较同容量替代型号;渠道 SSD 周价稳定不等于该 SKU 已形成下跌趋势 |
价格来源: 9800X3D、MSI RTX 5070 VENTUS 3X、ASUS TUF B850M-PLUS WIFI7、Kingston FURY DDR5-6000 32GB、IronWolf Pro 8TB、ZHITAI Ti600 2TB。
判断依据
闪存市场当日可见报价页显示多档渠道与行业 SSD 周报价涨跌为 0%,但 9 月 3 日产业数据仍把 DRAM/NAND 放在偏强供需环境中;这些美元上游指标只用于解释方向,不写入人民币 ToC 折线。GPU 方面,9 月 3 日公开渠道消息显示 RTX 5070 型号上调约 ¥200、RTX 5070 Ti 上调约 ¥300,显存物料成本仍是主要理由。因此 GPU、DRAM 与 SSD 不给出“继续下跌”判断;CPU 与主板则以同一固定 SKU 的真实连续采样为准。
本期结论
两篇材料都说明了同一个工程问题:元数据不是免费资源。rustc 因生命周期条件缺失,多保留一整份增量查询缓存;HotSpot 因地址类别选错,把大量一次性调试字符串塞进全局表。最有迁移价值的做法不是事后定期清理,而是在数据产生处准确表达“活跃/已完成”和“需要重定位/需要全局槽位”的差异,再用真实项目、表项数量和多指标 benchmark 证明收益边界。