1. A method of managing memory for an application, the method comprising: identifying 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, each object of the second type storing a memory address of an object of the first type, and the plurality of regions including one or more target collection regions and one or more destination regions; selecting a set of target collection regions of the heap, wherein space from the heap is allocated for an application; and during a first period of time in which the application is executing on a computing device: in a concurrent marking phase, marking one or more reachable objects of the first type as live data, the one or more reachable objects marked in the concurrent marking phase being stored on the heap; for each region of the plurality, maintaining a calculation of live data in the respective region; traversing the objects of the first type marked in the concurrent marking phase; and evacuating 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.