I don't think that description applies to the memory heap, it is a method that is used to sort data in a given block using a technique that handles the data similar to the memory heap.
It wouldn't make any sense to clean up a heap this way, anything still in the heap would indeed be scrambled. The exception to this is if the heap supports handles (a pointer to a pointer). The location of the handle would be fixed in memory but the data block it points to isn't.
"Handle" blocks are the only sort you could do a clean up on, Pointer blocks have to be left alone.
I wrote the following program to see what happens when pointers to the heap are created:
It seems like B1 and B2 are placed directly after each other on the heap. One would expect that if the heap gets 'cleaned up', and the location of the objects are changed during this process ,the pointers will point to the wrong memory locations. This is not the case however. Does the processor use a hardware lookup table to get the memory pointed to by B1 and B2? i.e. are the addresses returned by the program virtual addresses?