Сборщик мусора .NET собирает объекты (восстанавливает их память), а также выполняет уплотнение памяти (чтобы сохранить фрагментацию памяти до минимума).
Мне интересно, так как приложение может иметь много ссылок на объекты, как GC (или CLR) управляет этими ссылками на объекты, когда адрес объекта изменяется из-за сжатия, выполняемого GC.