FA-90794 / Garbage collector invariants / Member archive
TAMS: marks carried over into the next cycle · case 04
Objects marked in an earlier cycle survive later cycles without being reached.
Case contract
Concurrent marking with per-region top-at-mark-start (TAMS). alloc r size bump-allocates in region r (addresses r*region_size onward; None if it would pass the region end). start snapshots every region's current top as its TAMS (regions never allocated in have TAMS at their bottom) and clears marks. mark addr marks an object. end frees, in address order, every object below its region's TAMS that is not marked; objects at or above TAMS were allocated during marking and are live. Return allocation addresses and the freed list of each end.
Why this case matters
Snapshot collectors treat objects allocated during marking as live using a per-region watermark.
One recorded failure
Sample boundary fixtureThis sample comes from the broken implementation of a controlled reproducer.
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| second cycle uses fresh TAMS and marks | [0, 30, 100, 54, [30, 100], [54]] | [0, 30, 100, 54, [30, 100], [0, 54]] | Failed |
MEMBER ARCHIVE
The complete case is available to members.
This record includes three runnable implementations, regression fixtures, execution results, and source hashes.
Member access is invitation-based. Sign in with your invited account to inspect the sources.
Sign in to the archive ↗