Parent: #97 Related: #62, #49, #44, #119
Delivered
Production no-GIL contexts now use a bounded cooperative young-generation rendezvous under sustained shared allocation:
38f4daa6— arm aggregate cell-byte accounting only after a second worker exists, elect one collector after a 1 GiB tranche, freeze peers at existing safepoints, and collect young only after every active peer acknowledges;8332a814— release a published stop if the elected collector exits abruptly;fff12f90— distinguish cooperative peer parks from the older abort-safe collector's non-blocking root publications;0ada3601— publish the clean 1,540-sample report, raw evidence, benchmark guide, and README scorecard.
The rendezvous waits at most 100 ms. A timeout performs no collection and leaves the existing safe fallback intact. Lone-worker allocation remains byte-identical because accounting is not armed until the second worker record is registered. The opt-in abort-safe concurrent collector remains available for its dedicated stress coverage.
Accepted evidence
Measured commit: fff12f905819fab376372fabddb46d6a95f02f97
Published by: 0ada3601
Report: https://github.com/zig-utils/zig-js/blob/main/docs/.data/benchmark-comparison-2026-07-15.md
Raw evidence: https://github.com/zig-utils/zig-js/blob/main/docs/.data/benchmark-comparison-2026-07-15.tsv
Shared object_churn medians / mode-local scaling / RSD:
- 1 lane: 193.853 ms / 1.00x / 13.09%
- 2 lanes: 391.765 ms / 0.99x / 13.07%
- 4 lanes: 752.843 ms / 1.03x / 8.40%
- 8 lanes: 2,374.329 ms / 0.65x / 6.32%
The exact order-balanced parent/candidate A/B held one lane effectively flat (196.399 -> 195.479 ms, -0.5%) and cut eight lanes from 5,554.628 to 2,214.625 ms (-60.1%) with exact checksums. A separate exact seven-sample eight-lane run under /usr/bin/time -l reported maximum resident set size 1,216,266,240 bytes and peak memory footprint 1,215,253,168 bytes, versus the original 7.8 GB profile peak (about 84% lower).
Direct object churn is 109.144 ms versus 117.864 ms for JSC. The production policy is shared-context-only and does not alter private independent-context allocation.
Validation
- full normal unit gate: 770 passed, 0 skipped, 0 failed, 0 leaked;
- full TSan gate: 769 passed, 1 expected sustained-allocation soak skip, 0 failed, 0 leaked;
- focused cooperative, abandoned-collector, GC-cell quota recovery, and ArrayBuffer quota recovery cases pass under normal and TSan builds;
- benchmark harness guard: 7/7;
- clean full benchmark matrix: 1,540/1,540 samples, exact checksums, every median above 50 ms;
- documentation build: 24 pages.
Acceptance
- Materially reduce shared object-churn peak memory and improve eight-lane throughput/scaling without moving work outside the timed boundary.
- Do not regress direct or warmed independent object churn.
- Keep exact object/prototype/indexed replacement/barrier/OOM/finalization/checksum semantics.
- Pass focused no-GIL, GC, OOM, finalization, full-unit, and TSan gates.
- Refresh the generated report, raw evidence, benchmark guide, and README after a clean full matrix.
#97 remains open because shared object churn still scales below 1.0x at eight lanes; this issue's bounded production collection scope is complete.