Then the set of records we identify as live may be too large, but this is ok. Conservatively identify pointers, use mark-sweep collection with mark bits stored in a separate data structure. Works with minimal requirements on mutator, but collector must be able to identify all pointers. This idea works because in practice few integers look like pointers. When a count reaches zero, put the record on the free list.
Reference counting requires the mutator to explicitly discard records it no longer needs.
The problem with reference counting is that cycles are never reclaimed. Stack Allocation Many environment records and continuations frames are allocated in LIFO order. For those frames that have stack-like behavior use a stack instead.