Parent: #97 Related: #62, #101, zig-utils/zig-gc#17
Evidence
After bounded tail trimming (#101), direct and shared object_churn profiles still spent most nursery time in sweep and GcCellBacking.freeFn. The rejected zig-gc#17 experiment proved that batching allocator dispatch/size-class locks was neutral at the 8x100 publication load: per-cell ownership classification and writing/linking one intrusive FreeNode remained the real work.
Retained design
Reusable slots now live in fixed-size per-chunk bitmaps, with a hot reusable-chunk hint per size class. Sweep no longer writes allocator links into dead cells. Tail trimming counts and removes bitmap state only for discarded chunks.
Implementation: 4e3de6f5
Publication: 24656d74
Pre-existing amplify seed 107 timeout: #103
Pre-existing midgc CI case: #96
Acceptance criteria
- Reuse freed slots without one intrusive linked-list write per dead cell.
- Preserve partially live chunks, mixed size classes, stale-header rejection, ownership indexes, exact stats, and bounded tail trimming.
- Prove wholly empty and fragmented chunk reuse, full/minor collections, OOM recovery, teardown, and parallel allocation/sweep safety.
- Exact-parent direct and 1/2/4/8-lane shared object-churn A/B retains exact checksums and materially improves the publication load.
- Pass focused allocator/GC/no-GIL units, full units once, and relevant TSan/threadfuzz gates; deterministic unrelated failures reproduce on the exact parent and are tracked as #96/#103.
- Refresh the full report, raw TSV, README, and benchmark guide after a retained change.