1. A method for memory management in execution of a program by a computer having a memory, comprising: allocating respective portions of the memory to data objects using mutator threads of the program, whereby the objects are held in a heap created by the program; tracing the data objects in the heap so as to mark the data objects that are reachable at a given stage in the program; looping over the mutator threads so as to verify for each of the mutator threads that every update to the allocated portions of the memory in progress by the mutator thread has been completed; and sweeping the heap so as to free the memory that is allocated to the data objects that are not marked as reachable, for reallocation to new data objects.