A system and method for incrementally compacting a computer system heap is presented.
A heap, such as a garbage-collected heap in a Java environment, is divided into
logical regions. When the heap is becoming fragmented, an incremental compaction
cycle is commenced. During a first time period, the first region of the heap is
compacted, with subsequent regions being compacted during subsequent time periods.
A time period commences when a garbage collection event occurs. In a multiprocessor
environment the regions can be divided into a number of sections which are each
compacted using a different processor. One or more break tables are constructed
indicating how far contiguous groups of moveable objects should be moved to better
group objects and eliminate interspersed free spaces. References throughout the
heap that point to objects within the compacted region are then adjusted so that
the references point to the new object locations.