Сборка мусора
Как только определено множество недостижимых объектов, сборщик мусора может освободить память, занимаемую ими, и оставить остальное как есть. Также можно после освобождения памяти переместить все или часть оставшихся объектов в другие области памяти, обновив вместе с этим все ссылки на них. Эти два варианта реализации называются, соответственно, "неперемещающим" и "перемещающим".
Финализатор
Внешне финализатор схож с деструктором класса, однако в действительности эффект действия и область применения этих методов существенно различаются. Различие вызвано тем, что момент вызова финализатора, в отличие от деструктора, не определён жёстко: финализатор всегда вызывается перед уничтожением объекта сборщиком мусора, но момент уничтожения зависит от режима работы сборщика мусора, объёма доступной оперативной памяти и активности использования памяти программой. Так, если свободной памяти мало и создание новых объектов происходит постоянно, потребность в сборке мусора возникает часто и финализатор, соответственно, с высокой вероятностью будет вызван вскоре после прекращения использования объекта. Если же памяти много, а потребление её программой мало, то от прекращения использования объекта до сборки мусора (и вызова финализатора) может пройти длительное время. Более того, если памяти много и новые объекты почти или совсем не создаются, то сборщик мусора может вообще не вызываться, а по завершении программы вся выделенная ей память будет просто возвращена операционной системе; в этом случае финализатор, возможно, вообще не будет вызван.