保留的 PTY 检测器输入¶
通告 URL 监视器为每个已绑定 PTY 保留一个 4,096 字符的保留缓冲,并为最多 32 个未绑定 PTY 中的每个保留 16,384 字符。Command Code 状态检测器在其特定于代理的预过滤器之前保留 300 个字符,包括普通 shell、Claude 和 Codex 输出。每个都可能通过 V8 切片字符串使整个原始输入保持存活。
该修复在丢弃超大输入时使用现有的 ownRetainedString 复制器。它保留 URL 重建、状态检测、UTF-16 码元、绑定/解绑、缓存限制以及远程/本地权限。这些是 #20960 中的三个额外边界。
复现¶
该脚本打包了实际的检测器和监视器。基线仅在内存中移除三个复制调用。每个输入都有自己独立的活动所有者;URL 用例使用独立的监视器实例以隔离每个保留缓冲。堆在 GC 之后、完成部分 URL 并验证清理之前进行测量。结果包含所有者开销,而不仅仅是文本。捆绑哈希和测量。
| 用例 | 每个所有者的输入 | 所有者 | 修复前堆 | 修复后堆 |
|---|---|---|---|---|
| 状态检测器 | 64 Ki 字符 | 32 | 2,112,688 | 41,400 |
| 已绑定 URL 保留缓冲 | 64 Ki 字符 | 32 | 2,173,848 | 204,112 |
| URL 待绑定 | 64 Ki 字符 | 32 | 2,148,824 | 575,512 |
| 状态检测器 | 4 Mi 字符 | 8 | 33,557,144 | 6,504 |
| 已绑定 URL 保留缓冲 | 4 Mi 字符 | 8 | 33,569,168 | 47,112 |
| URL 待绑定 | 4 Mi 字符 | 8 | 33,568,936 | 144,504 |
在 macOS 上使用 Node v26.6.0 捕获。修复前有三个 GC 回归测试失败,每个保留约 32 MiB,修复后通过。五套件运行通过 164 个测试,包括现有 URL/状态行为以及复制器 Unicode/回退测试。
范围与限制¶
主进程在渲染器批处理之前向两个观察者提供数据。默认守护进程批量输出帧最多为 64 Ki UTF-16 字符;主进程后续的 16 Ki 字符批处理不会限制这些读取器。4 Mi 字符的用例展示了在更大输入下的保留机制,而非正常守护进程帧大小。两种实现也存在于 v1.4.198 中。
转换后的帧绕过普通分块切片,但仍面临守护进程的 16 MiB 编码行限制。原生回退输出没有应用层分块上限;此审计未确认多 MiB 原生读取。普通中继分块为 16 Ki 字符。实际的主进程馈送是 orca-runtime-on-pty-data.ts,普通守护进程边界在 daemon-stream-data-batcher.ts 中。
这些是每个所有者的最后输入成本,而不是对于固定 PTY 集合和固定大小帧的无界增长。消费相同输入的所有者可以共享同一个后备字符串,因此不能将三项测量作为独立进程成本相加。解绑会移除 URL 缓冲和待处理条目。这按活动所有者比例改善内存;它并未确定 #19831 或 #19768 的原因或增长速率。复制工作量受小型保留尾部的限制。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 orca48/orca