1. A method comprising: identifying a first object in a heap, wherein the heap is accessed by a plurality of mutator threads executing within a first plurality of operating system processes and each mutator thread in the plurality has a corresponding garbage collection thread from a plurality of garbage collection threads executing within a second plurality of operating system processes; determining, based on a root pointer associated with a first mutator thread from the plurality of mutator threads, that the first object is a reachable object; determining, based on a marking phase of a garbage collection cycle, that a first range of memory locations in the heap does not contain any reachable object; receiving an allocation request from a second mutator thread from the plurality of mutator threads; and allocating, responsive to the allocation request, a first free chunk of memory, including at least a part of the first range of memory locations, to the second mutator thread.