1. A method for managing memory in a computer system in which memory locations in use at any given time are represented as a set of memory objects in a system root object graph comprising: identifying one or more candidate objects in a dereferenced object graph, the dereferenced object graph including a set of objects that were dereferenced from the system root object graph, the one or more candidate objects being connected objects in the dereferenced object graph that are not marked as being live, wherein the dereferenced object graph is stored in a memory; extracting dead object data from the one or more candidate objects; removing, after extracting the dead object data from the one or more candidate objects, the one or more candidate objects from memory; storing the extracted dead object data in the dereferenced object graph; and repairing the dereferenced object graph.