1. A system for managing memory for an application, the system comprising: a region identifier that identifies a plurality of regions of a heap storing one or more objects of a first type and one or more objects of a second type and selects a set of target collection regions of the heap, wherein space from the heap is allocated for an application, each object of the second type stores a memory address of an object of the first type, and the plurality of regions includes one or more target collection regions and one or more destination regions, wherein during a concurrent marking phase, for each region of the plurality the region identifier maintains a calculation of live data in the respective region; a marking module that in the concurrent marking phase marks one or more reachable objects of the first type as live data, wherein the one or more reachable objects marked in the concurrent marking phase is stored on the heap; an evacuator that traverses the objects of the first type marked in the concurrent marking phase and evacuates a set of traversed objects from one or more target collection regions of the set of target collection regions to a destination region of the heap; and a garbage collector thread that scans a root set, wherein for each root of the root set that references an object of the first type stored in a target collection region of the set of target collection regions, the garbage collector thread evacuates from the target collection region to a destination region of the heap the respective object that is referenced by the respective root and updates the respective root to reference the evacuated object stored in the destination region.