FAILURE MAP
← Case archive

FA-90770 / Garbage collector invariants / Member archive

TLAB: half-buffer objects allocated inside TLABs · case 05

Medium-sized objects retire TLABs early and waste most of each buffer.

Member previewVariant 5 · 3 implementations · 8 checks per implementation

Case contract

Bump allocation through a thread-local buffer (TLAB). Requests are rounded up to 8 bytes. Requests larger than half a TLAB go straight to shared eden. Otherwise allocate in the TLAB when it fits (end inclusive). If not, and the TLAB still has more free space than the refill waste limit, allocate this object in eden, keep the TLAB and raise the limit by waste_inc; else retire the TLAB (its remaining space counts as waste) and carve a new TLAB from eden. Eden allocations fail (None) when they would end beyond eden_end. Return addresses, total waste, eden top and the final limit.

Why this case matters

Allocation fast paths decide heap layout and GC frequency; boundary slips waste memory or overlap objects.

One recorded failure

Sample boundary fixture

This sample comes from the broken implementation of a controlled reproducer.

Boundary fixtureActualExpectedOutcome
request of exactly half a buffer and just above{"addrs": [0, 64, 128, 72], "limit": 16, "top": 200, "waste": 0}{"addrs": [0, 64, 128, 72], "limit": 8, "top": 200, "waste": 0}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 ↗