В стиле управления памятью, обычно используемом в C, информация, которая отслеживает, какие области кучи свободны или выделены, отделена от информации, которая указывает, какие области фактически используются.Когда информация о куче больше не нужна, код должен явно пометить ее как нераспределенную, иначе она может остаться выделенной навсегда.
Система на основе сборки мусора рассматривает все ссылки на объекты кучи в системе какокончательный индикатор, для которого используются объекты.Поскольку было бы непрактично сканировать все ссылки на объекты в системе каждый раз, когда объект был выделен, система эффективно «пакетирует» работу: до тех пор, пока в куче остается свободное пространство памяти, память просто выделяется объектам последовательно.Не предпринимается никаких попыток освободить какое-либо пространство, пока куча не будет переполнена.
Объект будет считаться «использованным», если какой-либо поток содержит ссылку на него в локальной переменной или если хранится какая-либо глобальная переменнаяссылка на него, или если объект, который считается «использованным», содержит ссылку на него в любом поле.Компилятор обычно может сказать, будет ли локальная переменная, которая содержит ссылку на объект, фактически никогда не использоваться, но он не может делать такие определения с глобальными переменными или полями объекта.Если объект, который будет полезен, содержит ссылку на объект, которая больше никогда не будет использоваться, эта ссылка должна быть установлена на ноль (Nothing в VB).Если этого не сделать, бесполезный объект будет «поддерживаться в живых», пока полезный объект есть.Если полезный объект похож на основную форму приложения, результатом может быть утечка памяти, которая сохраняется до тех пор, пока приложение остается открытым.