Для вирішення проблеми фрагментації пам'яті в системі можуть бути реалізовані різні алгоритми ущільнення. Ущільнення може бути частковим або повним. При частковому ущільненні пам'яті активні блоки не можна зрушувати, тому ущільнення виконується тільки шляхом об'єднання суміжних вільних блоків. Повний ущільнення виконується за допомогою зсуву активних елементів для ліквідації утворилися між ними "вікон".
На час виконання алгоритму ущільнення обчислення припиняються.
Позначимо Compaction_Pointer покажчик ущільнення елемента купи, а Size - розмір елемента купи. Для виконання алгоритму ущільнення потрібно також два робочих покажчика: P - покажчик для переміщення по елементах купи, Q - поточний покажчик ущільнення.
Алгоритм ущільнення розбивається на чотири етапи, перший з яких - етап маркування - виконується за тією ж схемою, що і при зборі сміття (елементи купи проглядаються по ланцюжках посилань, що починаються зовнішніми покажчиками), тому в системах, що допускають появу сміття, процедуру збору сміття поєднують з реалізацією алгоритму ущільнення.
Другий крок алгоритму - установка покажчиків ущільнення. Він виконується шляхом послідовного обходу всіх елементів купи, починаючи з першого блоку, за такими правилами:
¨ спочатку покажчики P і Q встановлюються на початок купи;
Послідовний прохід по елементам купи:>
whileP не вийшов за межі кучіdo
begin Встановлюємо його покажчик ущільнення>
Описаний алгоритм дозволяє виконати збірку сміття без фрагментації пам'яті в тій же самій області, де в даний момент розташовані активні осередки.