FA-90790 / Garbage collector invariants / Member archive
TAMS: watermark aliases the live allocation top · case 05
TAMS moves with allocation, so objects allocated during marking must be marked or are freed.
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 |
|---|---|---|---|
| regression: objects above TAMS are implicitly live | [0, 30, 100, 55, 200, [30, 55, 100, 200]] | [0, 30, 100, 55, 200, [30, 100]] | 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 ↗