1. Divide the heap in two halves
  2. Allocate the first half (fast allocation)
  3. When the first half fills up, copy live objects to the second half
  4. Now allocate in the second half (fast allocation)
  5. When the second half fills up, copy live objects back to the first half
  6. Repeat
  7. When you copy, you also want to defrag the heap