- Divide the heap in two halves
- Allocate the first half (fast allocation)
- When the first half fills up, copy live objects to the second half
- Now allocate in the second half (fast allocation)
- When the second half fills up, copy live objects back to the first half
- Repeat
- When you copy, you also want to defrag the heap