Thread Local Collector

The thread local collector requires that prior to a block reference being transferred from one thread to another the block must either be assigned into a globally reachable scanned location via a write barrier, or the block must be retained.

Write Barriers

Only valid block pointer values should be stored using write barriers. Valid pointer values are block start pointers which were returned by an allocator function or acquired by the thread via a chain of pointer reads and stores that can (theoretically) be traced back to a value returned by an allocator function. A pointer value computed using pointer arithmetic is invalid. The collector should warn when an invalid pointer is detected in a write barrier, but tolerate and perform the assignment.

Resurrection

Resurrection is not supported. Resurrection is any attempt to keep alive a block which has been determined to be garbage. This includes:
	- Retaining the block. (Retaining a block during finalization is permitted so long as the reference count becomes zero again before finalization completes.)
    	- Storing a reference to the garbage block in non-garbage memory. (Storing a reference in another garbage block is permitted.)

Although resurrection leaves dangling pointers and can be effectively considered a heap corruption, the collector currently only warns about resurrection. Resurrected blocks are kept alive in a "zombie" state until they are determined to be garbage (again).