Алгоритм сбора мусора
Для того, чтобы определить в какой момент нужно вызывать деструктор объекта, каждый объект содержит скрытое поле, хранящее счетчик ссылок. Каждый раз, когда в программе появляется новая ссылка на объект, это значение счетчика увеличивается на единицу, а при удалении ссылки — уменьшается на единицу. Если в какой-то момент обнаружено, что значение счетчика обнулилось, объект удаляется.
При удалении объекта происходит следующее: